Articles of select

在testserver上,使用Select()连接的Linux TCP失败

我的问题是:我在Linux中编程接口来通过以太网控制GPIB控制器。 要做到这一点,我打开一个TCP套接字,只是发送命令到控制器。 到目前为止,这工作得很好。 我在为Interface写某种unit testing的时候出现了这个问题:为了检查我在一个单独的线程中使用了一个来自boost lib的tcp接受器,并且连接到它而不是实际的控制器。 这也正在工作,但是只要来自接口的connect()调用被阻塞。 但是,因为我需要connect()调用指定的超时,我必须连接到select()函数: // Open TCP Socket m_Socket = socket(PF_INET,SOCK_STREAM,0); if( m_Socket < 0 ) { m_connectionStatus = STATUS_CLOSED; return ERR_NET_SOCKET; } struct sockaddr_in addr; inet_aton(m_Host.c_str(), &addr.sin_addr); addr.sin_port = htons(m_Port); addr.sin_family = PF_INET; // Set timeout values for socket struct timeval timeouts; timeouts.tv_sec = SOCKET_TIMEOUT_SEC ; // const -> 5 […]

在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。 谢谢!

如何使用本地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] […]

在Windows上的python select.select()

我正在使用这里的代码testingUDP冲孔。 它在Linux上工作,但在Windows上报告错误。 以下是发生错误的代码段: while True: rfds, _, _ = select([0, sockfd], [], []) # sockfd is a socket if 0 in rfds: data = sys.stdin.readline() if not data: break sockfd.sendto(data, target) elif sockfd in rfds: data, addr = sockfd.recvfrom(1024) sys.stdout.write(data) 和错误消息: Traceback (most recent call last): File "udp_punch_client.py", line 64, in <module> main() File "udp_punch_client.py", […]

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

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