Sponsored Content
Top Forums Programming Can't I Cast sockaddr to sockaddr_in?! Post 302253502 by f.ben.isaac on Friday 31st of October 2008 07:38:25 PM
Old 10-31-2008
Can't I Cast sockaddr to sockaddr_in?!

I'm trying to grab client's port number, by doing the following code:

Code:
//get client's port number - here we are not dealing with pointers
//because the returned value will be passed as a parameter to htons()
//htons() takes u_short, which is similar to short, parameter
short get_client_port(struct sockaddr clientInformation)
{
    //carries the port number that client connected from
    short portNumber;
    
    //check the family version of client IP address, so you
    //can know where to cast, either to sockaddr_in or sockaddr_in6
    //and then grab the port after casting
    if (clientInformation.sa_family == AF_INET) {
        struct sockaddr_in ipv4 = (struct sockaddr_in)clientInformation;
        portNumber = ipv4.sin_port;
        return portNumber;
    }else{
        struct sockaddr_in6 ipv6 = (struct sockaddr_in6)clientInformation;
        portNumber = ipv6.sin6_port;
        return portNumber;
       }
}

In some point i did this:

Code:
short portNum =  get_client_port(clientInfo);
short portHostByte = ntohs(portNum);
//put portHostByte in a printf()

Why do i get the following errors?

Code:
echo_server.cpp: In function ‘short int get_client_port(sockaddr)':
echo_server.cpp:53: error: no matching function for call to ‘sockaddr_in::sockaddr_in(sockaddr&)'
/usr/include/netinet/in.h:218: note: candidates are: sockaddr_in::sockaddr_in()
/usr/include/netinet/in.h:218: note:                 sockaddr_in::sockaddr_in(const sockaddr_in&)
echo_server.cpp:57: error: no matching function for call to ‘sockaddr_in6::sockaddr_in6(sockaddr&)'
/usr/include/netinet/in.h:232: note: candidates are: sockaddr_in6::sockaddr_in6()
/usr/include/netinet/in.h:232: note:                 sockaddr_in6::sockaddr_in6(const sockaddr_in6&)

Any idea?
 

6 More Discussions You Might Find Interesting

1. Programming

why to use dynamic cast in c++

class base { public: virtual void disp() {cout<<"from base\n";} }; class derv : public base { public: void disp() {cout<<"from der\n";} }; int main() { base *b=new derv; b->disp(); derv *d; d=dynamic_cast<derv*>(b); d->disp(); return(0); (0 Replies)
Discussion started by: sarwan
0 Replies

2. Programming

Help - Cast converts default int return type

What does the warning message 724 "Cast converts default int return type to." tell me. I am new to C. (used it some in college). We are migrating our c-code to 10.2.0.3.0. The programs compiled clean. However there were several warning messages that kick out. The most prominent warning is: ... (5 Replies)
Discussion started by: rtgreen
5 Replies

3. Red Hat

cast from const void* to unsigned int loses precision

Hello everey one, here i am attempting to compile a c++ project .it's throughing the following errors. my machine details are as follows: Linux chmclozr0119 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:19 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux errors: ===== Generating... (0 Replies)
Discussion started by: mannam srinivas
0 Replies

4. Programming

`strcat' makes pointer from integer without a cast

A question to ask. seq1 = "eeeeeeeeeeeeeeeeee"; seq2 = "dddddddddddddddddddd"; char a = '*'; strcat(*seq2, &a); strcat(*seq1, seq2); compilation warning: passing arg 1 of `strcat' makes pointer from integer without a cast thanks (4 Replies)
Discussion started by: cdbug
4 Replies

5. Programming

warning: passing arg 1 of `inet_addr' makes pointer from integer without a cast

I use solaris10,following is tcp client code: #include "cliserv.h" int main(int argc,char argv){ struct sockaddr_in serv; char request,reply; int sockfd,n; if(argc!=2) err_quit("usage: tcpclient <IP address of server>"); if((sockfd=socket(PF_INET,SOCK_STREAM,0))<0) ... (1 Reply)
Discussion started by: konvalo
1 Replies

6. Programming

Cast from String to char

Hello, This is my code: i'd like to like to add getenv("MYLIB") in the first case of my buffer inside of '1' , should i do the cast ? and how please ? Thank you. (1 Reply)
Discussion started by: chercheur857
1 Replies
in.h(3HEAD)                                                           Headers                                                          in.h(3HEAD)

NAME
in.h, in - Internet Protocol family SYNOPSIS
#include <netinet/in.h> DESCRIPTION
The <netinet/in.h> header defines the following types through typedef: in_port_t An unsigned integral type of exactly 16 bits. in_addr_t An unsigned integral type of exactly 32 bits. The <netinet/in.h> header defines the in_addr structure that includes the following member: The <netinet/in.h> header defines the in_addr structure that includes the following member: in_addr_t s_addr The <netinet/in.h> header defines the type sa_family_t as described in socket.h(3HEAD). The <netinet/in.h> header defines the following macros for use as values of the level argument of getsockopt() and setsockopt(): IPPROTO_IP Dummy for IP IPPROTO_ICMP Control message protocol IPPROTO_TCP TCP IPPROTO_UDP User datagram protocol The <netinet/in.h> header defines the following macros for use as destination addresses for connect(), sendmsg(), and sendto(): INADDR_ANY Local host address INADDR_BROADCAST Broadcast address The <netinet/in.h> header defines the sockaddr_in structure that is used to store addresses for the Internet protocol family. Values of this type must be cast to struct sockaddr for use with the socket interfaces. Default For applications that do not require standard-conforming behavior (those that use the socket interfaces described in section(3SOCKET) of the reference manual; see Intro(3) and standards(5)), the <netinet/in.h> header defines the sockaddr_in structure that includes the follow- ing members: sa_family_t sin_family in_port_t sin_port struct in_addr sin_addr char sin_zero[8] Standard conforming For applications that require standard-conforming behavior (those that use the socket interfaces described in section(3XNET) of the refer- ence manual; see Intro(3) and standards(5)), the <netinet/in.h> header defines the sockaddr_in structure that includes the following mem- bers: sa_family_t sin_family in_port_t sin_port struct in_addr sin_addr unsigned char sin_zero[8] ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ SEE ALSO
Intro(3), connect(3SOCKET), connect(3XNET), getsockopt(3SOCKET), getsockopt(3XNET), sendmsg(3SOCKET), sendmsg(3XNET), sendto(3SOCKET), sendto(3XNET), setsockopt(3SOCKET), setsockopt(3XNET), socket.h(3HEAD), attributes(5), standards(5) SunOS 5.10 30 Aug 2002 in.h(3HEAD)
All times are GMT -4. The time now is 04:05 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy