老师,我用您视频中的代码也会产生这个问题“第一个客户端可以发送数据,新起第二个客户端也可以发送数据,但是这个时候返回第一个客户端就不可以发送数据了”。

来源:5-2 通过select实现高性能服务器

Harmin

2019-11-13

后来发现如果在整个死循环外面,把accept_fds[]用for循环全置为-1,就没有这个问题了。
我的问题是

  1. 我不知道其中的原因是什么?为什么不成功的全置为-1就会发生那种情况?
  2. 在我调试的过程中,我发现输出两个client中的socket,都是一个值3,这样不会引起socket的冲突吗?
    图片描述
写回答

3回答

w3n9

2019-11-27

//img.mukewang.com/szimg/5dde2f1509c2715b08890847.jpg

这是我用gcc的

0
0

w3n9

2019-11-27

对于他说的这个,试了一下老师说的那种初始化的方法好像只有第一个是-1,然后后面都是0

我用的是gcc,不知道clang是不是会全部初始化成-1


0
1
haohao888
clang++也一样。所以还是必须用for循环把accept_fds数组里的值全部初始化为-1.
2019-12-28
共1条回复

李超

2019-11-13

select 每次都要清一下。因为select 要将有时间的 fd 放到fds 数组中。换句话说,fds 中的fd 必须是真的有事件才行,不知你理解我的意思没!另外两个客户端是两个进程,每个进程都是从3开始,因为0,1,2,是标准输入,标准输出,和标准错误。

0
2
李超
文件描述符是进程相关的哈!
2019-11-23
共2条回复

百万级高并发WebRTC流媒体服务器设计与开发

备战5G音视频时代,抢先掌握服务端高级技能

2067 学习 · 375 问题

查看课程