×

Loading...

回答 #148555, 关于地址端口复用。

如果一个机器A有client-c1和server-s1,并共用一个IP地址-ipa和端口号-pna。它们要和另外一个机器B通讯,并且c1 connect到B 地址-ipb和端口-pnb,s1 accept 远端地址和端口也为ipb, pnb, 那么不可以。
除此以外均可。

在bind前需做以下工作才不会报错:
sockopt=1
if (setsockopt (sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&sockopt, sizeof (sockopt)) != 0)
{
perror("setsockopt");;
exit(1);
} .
if (setsockopt (sockfd, SOL_SOCKET, SO_REUSEPORT, (char *)&sockopt, sizeof (sockopt)) != 0)
{
perror("setsockopt");;
exit(1);
} .

如果你用的是Linux, 那么第2个SO_REUSEPORT不可用,即不能端口复用。Freebsd两个都可以,破破的Windows我不知道,你可以去试。
Report

Replies, comments and Discussions: