linux下tcp并发服务器与windows平台下winsock2的通信问题

碧空星尘 2005-12-25 07:11:37
按照标准的accept之后fork一个进程的办法来编写的服务器。监听描述符是listenfd(大小为3), accept返回值是connfd。然后子进程不用说,关闭listenfd,然后开始执行程序,依靠connfd进行通信,主进程关闭connfd,返回到accept处。
问题之一:按照这种模式,我把每次accept之后的返回值打印,发现奇怪的现象,就是不管客户端有没有并发,所有的connfd都是4,奇怪的是如果客户程序都是linux下的,则可以进行正常的通信。有点想不通。如果描述符一样,加上同样的协议和端口,难道不会发生混乱吗???
可是如果把主进程不关闭connfd,则每连接一次,服务端所返回的connfd就会比上一个大1。
谁知道是怎么回事呢?

另外一个问题,就是如果使用winsock2的windows客户程序多线程连接服务器,总会有几个线程连接不上,或者发送数据出错,报10038、10054、10053等错误,查了很久,发现都没有什么办法。郁闷
...全文
123 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧空星尘 2005-12-25
  • 打赏
  • 举报
回复
引用:
回复人: fierygnu(va_list) ( ) 信誉:100 2005-12-25 21:21:00 得分: 0


文件描述符就是递增的,也就是用第一个没有使用的最小值做描述符,所以connfd一直是4就对了。如果不关闭上一个connfd,connfd就递增了。
虽然描述符值相同,但这些描述符属于不同的进程,当然不会发生混乱。而且tcp连接是用(srcip, srcport, dstip, dstport)来唯一标识的。

---
应该已经解决!不过srcip, srcport, dstip, dstport的详细含义谁知道的可以说一下。


23,110

社区成员

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

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