读书人

请问一个getsockname函数使用的有关问

发布时间: 2012-03-25 20:55:17 作者: rapoo

请教一个getsockname函数使用的问题
写了下面一段代码,测试getsockname函数,先绑定sock到一个地址,然后用getsockname取出绑定的地址和端口,输出出来。
int main(){
int sock,i;
int pport;
struct sockaddr_in address,ad,da;
address.sin_family=PF_INET;
address.sin_port=htons(5060);
address.sin_addr.s_addr=inet_addr( "192.168.0.103 ");
sock=socket(AF_INET,SOCK_DGRAM,0);
bind(sock,(struct sockaddr *)&address,sizeof(address));
pport=htons(address.sin_port);
printf( "Port is:%d\n ",pport);
if(getsockname(sock,(struct sockaddr *)&ad,&i))
{
printf( "Error ");
}
pport=htons(ad.sin_port);
printf( "port is:%d ",pport);
}
---------------------
程序运行之后getsockname总是运行错误,运行结果为:
Port is:5060
port is:320

用getsockname取得的地址和绑定的不一样,到底是哪里出错了呢,请各位指教!谢谢了


[解决办法]
的先不看,先看你:
int sock,i;
int pport;

局部一定要初始化
[解决办法]
错误在于,i应该是一个指向struct sockaddr_in的变量,即加上i = sizeof(struct sockaddr_in);就OK啦。
[解决办法]
int PASCAL FAR getsockname( SOCKET s, struct sockaddr FAR* name,
int FAR* namelen);

s:标识一个已捆绑套接口的描述字。
name:接收套接口的地址(名字)。
namelen:名字缓冲区长度。

注意各参数

读书人网 >C++

热点推荐