为什么一个多网卡的服务器一般都在同一个端口建立多个监听套接字

SammyLan 2006-08-04 11:57:08
SOCKET slisten[16];
char *szPort="5150";
struct addrinfo hints,
* res=NULL,
* ptr=NULL;
int count=0,
rc;

memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
rc = getaddrinfo(NULL, szPort, &hints, &res);
if (rc != 0) {
// failed for some reason
}
ptr = res;
while (ptr)
{
slisten[count] = socket(ptr->ai_family,
ptr->ai_socktype, ptr->ai_protocol);
if (slisten[count] == INVALID_SOCKET) {
// socket failed
}
rc = bind(slisten[count], ptr->ai_addr, ptr->ai_addrlen);
if (rc == SOCKET_ERROR) {
// bind failed
}
rc = listen(slisten[count], 7);
if (rc == SOCKET_ERROR) {
// listen failed
}
count++;
ptr = ptr->ai_next;
}

上面的代码是不是在同一个端口上建立多个监听套接字?
这样做有什么好处?
能提高服务器的并发率和吞吐量?

多网卡的服务器就有多个IP,这和每个服务器一个IP,只创建一个监听套接字有什么区别?



...全文
381 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowbirdfly 2006-08-04
  • 打赏
  • 举报
回复
上面的代码是不是在同一个端口上建立多个监听套接字?
是~~~这样可以按照接收到的套接字进行处理,而这些套接字可以根据不同的IP绑定,进行区分~~~
从而能够区分处理。采用多线程来处理的话,的确可以提高服务器的并发率和吞吐量的。
DentistryDoctor 2006-08-04
  • 打赏
  • 举报
回复
分别绑定到不同的IP上?
Juchiyufei 2006-08-04
  • 打赏
  • 举报
回复
up
僵哥 2006-08-04
  • 打赏
  • 举报
回复
绑定IP可以很方便地防止重入,也就是另一个socket使用不同的IP绑定在同一机器同一端口上,从而防止黑软利用接管端口来达到穿透防火墙(因为防火墙通常对现有服务的端口是开放的).
healer_kx 2006-08-04
  • 打赏
  • 举报
回复
我是来接分了的。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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