关于getsockname的一个问题.

clane 2002-01-08 02:14:50
我一个服务端的socket,在bind以后调用getsockname,想得到它绑定的端口号。
但总是调用失败,错误号为WSAENOTSOCK。。这是怎么回事??即使在accept一个请求后再调用也是这样。。
...全文
499 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
soloeden 2002-02-09
  • 打赏
  • 举报
回复
............
jyc_nj 2002-01-09
  • 打赏
  • 举报
回复
代码如下,有省
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(HOSTPORT);

sock = socket(PF_INET, SOCK_STREAM, 0); //IPPROTO_TCP
if( bind(sock, (struct sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR ){
errexit("can't bind to HOST service port: %d \n", WSAGetLastError());
}

alen = sizeof(fsin);
if( getsockname(sock, (struct sockaddr *)&fsin, &alen) == SOCKET_ERROR ){
printf("getsockname error %d\n", WSAGetLastError());
}
else{
printf("the socket port is :%d",ntohs(fsin.sin_port));
}
clane 2002-01-08
  • 打赏
  • 举报
回复
这段代码工作很正常的啊。。。getsockname竟然提示,m_hSocket invalidsocket
clane 2002-01-08
  • 打赏
  • 举报
回复
没有啊。。天哪。。能不能把你bind的代码贴出来看看?我的是:
sockaddr_in siAddr;
if((m_hSocket = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
return 0;
}

siAddr.sin_family=AF_INET;
siAddr.sin_port=htons(port);
siAddr.sin_addr.S_un.S_addr=INADDR_ANY;
if (bind(m_hSocket,(struct sockaddr *)&siAddr,sizeof(siAddr))==SOCKET_ERROR){
return 0;
}

if(listen(m_hSocket, backlog) == SOCKET_ERROR) {

return 0;
}
jyc_nj 2002-01-08
  • 打赏
  • 举报
回复
不会吧,我这里可以。你bind没有出错么?
clane 2002-01-08
  • 打赏
  • 举报
回复
老大帮忙啊。。回答就给分那。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧