Articles of select

在Linux中select并接受延迟

我创build了一个简单的应用程序来接受使用select()和accept()的IPv4 TCP连接。 我使用python脚本来testing这个。 它依次打开100个连接。 即: for i in range(100): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print s.connect((IP, PORT)) s.send("Test\r\n") 我观察到的是,在第一次X连接后,我的应用程序在select()中停留了2秒钟。 strace的输出: 1344391414.452208 select(30, [3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29], NULL, NULL, NULL) = 1 (in [3]) […]

select() – 定时器

select()是一个很棒的系统调用。 您可以打包任意数量的文件描述符,套接字描述符,pipe道等,并在input可用时以同步方式得到通知。 有没有办法创build一个间隔/ oneshot定时器,并使用select()? 这将节省我有多个线程的IO和时间。

连接后,非阻塞套接字select返回1

首先我想说的是,这是另外一个问题: 相似但不一样 我的代码如下所示: struct addrinfo hints, *res; struct sockaddr* serveraddr; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; int res2 = getaddrinfo(ip, port, &hints, &res); printf("getaddrinfo() res: %d, %d\n", res2, errno); serveraddr = res->ai_addr; //create new socket int soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); printf("socket() res: %d, %d\n", socket, errno); //set nonblocking mode unsigned long […]

在Linux内核模块中实现轮询

我有一个简单的字符设备驱动程序,允许您从自定义硬件设备读取。 它使用DMA将设备内存中的数据复制到内核空间(然后直到用户)。 read电话非常简单。 它开始DMA写入,然后等待一个等待队列。 当DMA完成时,中断处理程序设置一个标志并唤醒等待队列。 重要的是要注意,我可以随时启动DMA, 甚至在设备有数据提供之前 。 DMA引擎将一直等待,直到有数据要复制。 这很好。 我可以在用户空间实现一个简单的阻塞读取调用,它的行为和我所期望的一样。 我想实施poll以便我可以在用户空间使用select系统调用,允许我同时监视此设备和套接字。 我可以在pollfind的大部分资源都说: 为每个可能指示状态改变的等待队列调用poll_wait 返回一个表示数据是否可用的掩码 第二部分是让我困惑的。 我见过的大多数示例都有一个简单的方法(一个指针比较或状态位)来检查数据是否可用。 在我的情况下, 除非我启动DMA , 否则数据永远不可用 ,甚至一旦我这样做了,数据也不会立即可用(可能需要一些时间才能使设备有数据并完成DMA)。 这将如何实施呢? poll函数是否应该启动DMA以使数据最终可用? 我想这会打破我的readfunction。

c ++如何使用select来查看套接字是否已经closures

有人可以提供一个如何使用select()查看客户端是否closures套接字连接的例子吗? 仅供参考。 我正在使用Linux。 谢谢!

我应该用什么来取代Windows上的gettimeofday()?

我正在编写一个可移植的Socket类,它支持发送和接收超时…为了实现这些超时,我使用了select() ….但是,我有时需要知道在select()这当然在Linux上,我会通过调用gettimeofday()之前和之后调用select()然后使用timersub()来计算delta …实现… 鉴于Windows上的select()接受struct timeval超时,我应该使用什么方法来取代Windows上的gettimeofday()?

Windowsbatch file中的用户决策超时

我写了一个简单的.bat文件,一次询问用户是/否的问题。 现在我想添加一个超时 – 让我们说10秒 – 它。 有一个简单的方法来做到这一点? 到目前为止我的来源: SET /P ANSWER=Do you want it (Y/N)? IF /i {%ANSWER%}=={y} GOTO :yes IF /i {%ANSWER%}=={yes} GOTO :yes GOTO :no :yes @echo Yeah, it will be done. GOTO :continue :no @echo Nope, it will not happen. GOTO :continue :continue @echo And on we go

Winsock2的fd 0(stdin)上的select()失败

使用Winsock2下面的代码序列为select()返回-1 (失败select() 。 #include <Winsock2.h> #include <stdio.h> … int rc; int fdstdin = fileno(stdin); /* returns 0 as expected */ fd_set fds; FD_ZERO(&fds); FD_SET(fdstdin, &fds); rc = select(1, &fds, NULL, NULL, NULL); … 这是使用Winsock2时的预期行为,还是我错过了一些东西?

如何使用本地Win32 API从焦点窗口中获取选定的文本?

我的应用程序 将在系统上运行,尝试监视一个热键; 当用户在任何窗口中select一些文本并按下热键时,如何获取所选文本,当我收到WM_HOTKEY消息? 为了将文本捕获到剪贴板上,我尝试使用keybd_event()和SendInput()将Ctrl + C发送到活动窗口( GetActiveWindow() )和forground窗口( GetForegroundWindow() ); 尝试过这些组合; 一切都是徒劳。 我可以使用普通的Win32系统API在Windows中获得选中的文本窗口吗?

可以select()与Windows下的Python文件一起使用?

我想在Windows下运行下面的python服务器: """ An echo server that uses select to handle multiple clients at a time. Entering any line of input at the terminal will exit the server. """ import select import socket import sys host = '' port = 50000 backlog = 5 size = 1024 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((host,port)) server.listen(backlog) input = [server,sys.stdin] […]