c++ socket端口混乱

最近在写web服务器的时候突然碰到了一个问题,就是在使用c++ socket的时候在浏览器上突然不能连接,想到前几天Xcode刚刚更新,还以为是Xcode导致clang出现问题。
进行调试的时候还以为是多路复用IO出了问题(因为调试的时候停在那里),后来才发现是因为没有收到连接请求。

于是非常苦恼。
万幸的是我遇到了Vs code这个神级编辑器。

写了个小程序进行测试,其实就是个最简单的server程序。然后用下面的程序进行测试,输出socket绑定的ip和端口(这个小程序也有点问题,输出的端口是网络字节序)

	sockaddr_in tmp;
	socklen_t ilen=sizeof(tmp);
	getsockname(sockfd,(struct sockaddr*)&tmp,&ilen);
	char *ip=inet_ntoa(tmp.sin_addr);
	int port=(int)tmp.sin_port;
	printf("%s:%d\n",ip,port);

发现每次输出的端口都是乱的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这才意识到可能是bind函数出现了问题。

幸亏有vscode,向我提示了函数的原型,意识到有点不大对劲
在这里插入图片描述
这才意识到调用了std::bind,而这个函数的功能是和我们要调用的socket中的bind是不一样的
在这里插入图片描述
在这里插入图片描述
想要调用socket中的bind,方法有两个:

  1. 不使用using namespace std;
  2. bind前加上::

至此,问题完美解决。

猜你喜欢

转载自blog.csdn.net/Monster_ixx/article/details/88956150