新手问题:多个fork出来的进程监听同个端口

mostneed 2007-07-29 10:34:59
服务器程序是否可以这样实现:
配置n个进程,同时监听一样的端口,无论udp还是tcp。

接受到网络数据或者链接时,均匀处理,实现负荷分担。

谢谢!
...全文
417 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mostneed 2007-07-31
  • 打赏
  • 举报
回复
使用SO_REUSEADDR
mostneed 2007-07-31
  • 打赏
  • 举报
回复
主要是用在udp啊,大哥们
roadingyh 2007-07-30
  • 打赏
  • 举报
回复
同意楼上的..
dai_weitao 2007-07-30
  • 打赏
  • 举报
回复
多进程监听一个端口是何必呢?
一个进程监听, 循环中实现accept阻塞, 有请求之后再fork就行了.
NC 2007-07-30
  • 打赏
  • 举报
回复
先listen再fork N个子进程accept, 注意信号灯(或其它互斥手段)控制一下,防止惊群。
NC 2007-07-30
  • 打赏
  • 举报
回复
回楼上的楼上,你这种方案不适合通讯量大,连接、断开频繁的情况。
mostneed 2007-07-29
  • 打赏
  • 举报
回复
sock_info->socket = socket(AF2PF(addr->s.sa_family), SOCK_DGRAM, 0);
if (sock_info->socket==-1){
LOG(L_ERR, "ERROR: udp_init: socket: %s\n", strerror(errno));
goto error;
}
/* set sock opts? */
optval=1;
if (setsockopt(sock_info->socket, SOL_SOCKET, SO_REUSEADDR ,
(void*)&optval, sizeof(optval)) ==-1){
LOG(L_ERR, "ERROR: udp_init: setsockopt: %s\n", strerror(errno));
goto error;
}
SmartHeart 2007-07-29
  • 打赏
  • 举报
回复
端口是独占的吧?

监听到了端口再fork不就好了?

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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