草庐IT

m_accept_fd

全部标签

c++ linux accept()在套接字关闭后阻塞

我有一个监听新连接的线程new_fd=accept(Listen_fd,(structsockaddr*)&their_addr,&sin_size);另一个线程在程序关闭时关闭Listen_fd。然而,在Listen_fd关闭后,它仍然阻塞。当我使用GDB尝试调试时,accept()不会阻塞。我认为这可能是SO_LINGER的问题,但默认情况下不应启用,并且在使用GDB时不应更改。知道发生了什么,或有任何其他关闭列表套接字的建议吗? 最佳答案 使用:sock.shutdown(socket.SHUT_RD)然后accept将返回E

c++ linux accept()在套接字关闭后阻塞

我有一个监听新连接的线程new_fd=accept(Listen_fd,(structsockaddr*)&their_addr,&sin_size);另一个线程在程序关闭时关闭Listen_fd。然而,在Listen_fd关闭后,它仍然阻塞。当我使用GDB尝试调试时,accept()不会阻塞。我认为这可能是SO_LINGER的问题,但默认情况下不应启用,并且在使用GDB时不应更改。知道发生了什么,或有任何其他关闭列表套接字的建议吗? 最佳答案 使用:sock.shutdown(socket.SHUT_RD)然后accept将返回E

c - select 只检查 fds 直到 255 直到 FD_SETSIZE

选择高于255的fds不检查fd是否打开。这是我的示例代码:#include#include#include#includeintmain(){fd_setset;for(inti=5;iiis%d\n",i);FD_ZERO(&set);FD_SET(i,&set);close(i);intretval=select(FD_SETSIZE,&set,NULL,NULL,NULL);if(-1==retval){perror("select");}}}这导致:-->iis5select:Badfiledescriptor...-->iis255select:Badfiledescrip

c - select 只检查 fds 直到 255 直到 FD_SETSIZE

选择高于255的fds不检查fd是否打开。这是我的示例代码:#include#include#include#includeintmain(){fd_setset;for(inti=5;iiis%d\n",i);FD_ZERO(&set);FD_SET(i,&set);close(i);intretval=select(FD_SETSIZE,&set,NULL,NULL,NULL);if(-1==retval){perror("select");}}}这导致:-->iis5select:Badfiledescriptor...-->iis255select:Badfiledescrip

c++ - 使用与 O_CLOEXEC 相同的 accept4() 设置 SOCK_CLOEXEcflags的目的是什么

基本上,我需要知道在使用accept4()时设置SOCK_CLOEXEC的目的是什么。我如何使用从accept返回的文件描述符检查此标志的功能。accepted_fd=accept4(sd,(structsockaddr*)&tcp_remote,&size,SOCK_CLOEXEC); 最佳答案 SOCK_CLOEXEC存在的原因是为了避免在从accept获取新套接字和之后设置FD_CLOEXEC标志之间出现竞争条件。通常,如果您希望文件描述符在执行时关闭,您首先要以某种方式获取文件描述符,然后调用fcntl(fd,F_SETFD

c++ - 使用与 O_CLOEXEC 相同的 accept4() 设置 SOCK_CLOEXEcflags的目的是什么

基本上,我需要知道在使用accept4()时设置SOCK_CLOEXEC的目的是什么。我如何使用从accept返回的文件描述符检查此标志的功能。accepted_fd=accept4(sd,(structsockaddr*)&tcp_remote,&size,SOCK_CLOEXEC); 最佳答案 SOCK_CLOEXEC存在的原因是为了避免在从accept获取新套接字和之后设置FD_CLOEXEC标志之间出现竞争条件。通常,如果您希望文件描述符在执行时关闭,您首先要以某种方式获取文件描述符,然后调用fcntl(fd,F_SETFD

python - 有人有 Linux 上 fd_set 的 gdb pretty-print 代码吗?

现代版本的gdb允许集成python代码以“pretty-print”复杂的数据结构。对于C++的STL类以及一些更常见的boost.org类型,有一些非常pretty-print实现。在网络编程中,经常会遇到select/poll调用。poll()使用数据结构数组,而select()使用fd_set。有没有人遇到过fd_set的pretty-print实现,最好是可移植的,但即使是特定于平台的也可以。理想情况下,它是linux/x86,但我愿意接受任何东西并希望能够适应。 最佳答案 好吧,这是我写的东西,它似乎在Linux下对我有

python - 有人有 Linux 上 fd_set 的 gdb pretty-print 代码吗?

现代版本的gdb允许集成python代码以“pretty-print”复杂的数据结构。对于C++的STL类以及一些更常见的boost.org类型,有一些非常pretty-print实现。在网络编程中,经常会遇到select/poll调用。poll()使用数据结构数组,而select()使用fd_set。有没有人遇到过fd_set的pretty-print实现,最好是可移植的,但即使是特定于平台的也可以。理想情况下,它是linux/x86,但我愿意接受任何东西并希望能够适应。 最佳答案 好吧,这是我写的东西,它似乎在Linux下对我有

linux - 从多个线程调用 accept()

我正在编写一个并发TCP服务器,它必须使用“每个连接一个线程”方法(使用一个线程池)处理多个连接。我怀疑哪个是每个线程获取不同文件描述符的最佳方式。我发现下面两种方法最值得推荐:一个主线程,它接受()所有传入的连接并将它们的描述符存储到一个数据结构中(例如:一个队列)。然后每个线程都能够从队列中获取一个fd。Accept()直接从每个线程调用。(在UnixNetworkProgrammingV1中推荐)我发现他们每个人的问题:存储所有fd的静态数据结构必须被锁定(mutex_lock)才能让线程读取它,因此在大量线程的情况下想在完全相同的时刻阅读我不知道要经过多少时间他们才能实现目标。

linux - 从多个线程调用 accept()

我正在编写一个并发TCP服务器,它必须使用“每个连接一个线程”方法(使用一个线程池)处理多个连接。我怀疑哪个是每个线程获取不同文件描述符的最佳方式。我发现下面两种方法最值得推荐:一个主线程,它接受()所有传入的连接并将它们的描述符存储到一个数据结构中(例如:一个队列)。然后每个线程都能够从队列中获取一个fd。Accept()直接从每个线程调用。(在UnixNetworkProgrammingV1中推荐)我发现他们每个人的问题:存储所有fd的静态数据结构必须被锁定(mutex_lock)才能让线程读取它,因此在大量线程的情况下想在完全相同的时刻阅读我不知道要经过多少时间他们才能实现目标。