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
sctp_getpaddrs(3SOCKET) 				     Sockets Library Functions					   sctp_getpaddrs(3SOCKET)

NAME
sctp_getpaddrs, sctp_freepaddrs - returns all peer addresses on an SCTP association SYNOPSIS
cc [ flag... ] file... -lsocket -lnsl -lsctp [ library... ] #include <sys/types.h> #include <sys/socket.h> #include <netinet/sctp.h> int sctp_getpaddrs(int sock, sctp_assoc_t id, void **addrs); void sctp_freepaddrs(void *addrs); DESCRIPTION
The sctp_getpaddrs() queries the peer addresses in an SCTP association. The sctp_freepaddrs() function releases resources that are allo- cated to hold the addresses. The sctp_getpaddrs() function returns all the peer addresses in the SCTP association identified by sock. On completion addrs points to a dynamically allocated array of sockaddr_in structures for an Internet Protocol (IPv4) socket or an array of sockaddr_in6 structures for an Internet Protocol Version 6 (IPv6) socket. The addrs parameter must not be NULL. For an IPv4 SCTP socket, the addresses returned in the sockaddr_in structures are IPv4 addresses. For an IPv6 SCTP socket, the addresses in the sockaddr_in6 structures can be IPv6 addresses or IPv4-mapped IPv6 addresses. If sock is a one-to-many style SCTP socket, id specifies the association of interest. If sock is a one-to-one style SCTP socket, id is ignored. The sctp_freepaddrs() function frees the resources allocated by sctp_getpaddrs(). The addrs parameter is the array of addresses allocated by sctp_getpaddrs(). RETURN VALUES
Upon successful completion, the sctp_getpaddrs() function returns the number of addresses in the addrs array. Otherwise, the function returns -1 and sets errno to indicate the error. ERRORS
The sctp_getpaddrs() succeeds unless one of the following conditions exist. EBADF The sock argument is an invalid file descriptor. ENOTSOCK The sock argument is not a socket. EINVAL The addrs argument is NULL. EINVAL The id argument is an invalid association identifier for a one-to-many style STP socket. ENOTCONN The specified socket is not connected. ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Committed | +-----------------------------+-----------------------------+ |MT-Level |Safe | +-----------------------------+-----------------------------+ SEE ALSO
bind(3SOCKET), in.h(3HEAD), libsctp(3LIB), sctp_freeladdrs(3SOCKET), sctp_getladdrs(3SOCKET), socket(3SOCKET), attributes(5), inet(7P), inet6(7P), ip(7P), ip6(7P), sctp(7P) SunOS 5.11 23 Jan 2008 sctp_getpaddrs(3SOCKET)
All times are GMT -4. The time now is 08:52 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy