首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-25 
请教一个getsockname函数使用的问题写了下面一段代码,测试getsockname函数,先绑定sock到一个地址,然后用ge

请教一个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:名字缓冲区长度。

注意各参数

热点排行