gpt4 book ai didi

c++ - C++ Linux 中的套接字超时

转载 作者:IT王子 更新时间:2023-10-29 00:19:52 25 4
gpt4 key购买 nike

好吧,首先我想提一下我所做的是完全合乎道德的,是的,我在进行端口扫描。

程序在端口打开时运行良好,但当我到达一个关闭的套接字时,程序会暂停很长时间,因为没有超时条款。下面是下面的代码

int main(){

int err, net;
struct hostent *host;
struct sockaddr_in sa;

sa.sin_family = AF_INET;

sa.sin_port = htons(xxxx);
sa.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx");

net = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
err = connect(net, (struct sockaddr *)&sa, sizeof(sa));

if(err >= 0){ cout << "Port is Open"; }
else { cout << "Port is Closed"; }

}

我在堆栈溢出时发现了这个,但使用 select() 对我来说没有意义命令。

问题是我们能否让 connect() 函数超时,这样我们就不会等待一年才返回错误?

最佳答案

最简单的方法是设置一个警报并让connect被信号中断(参见UNP 14.2):


signal( SIGALRM, connect_alarm ); /* connect_alarm is you signal handler */
alarm( secs ); /* secs is your timeout in seconds */
if ( connect( fs, addr, addrlen ) < 0 )
{
if ( errno == EINTR ) /* timeout */
...
}
alarm( 0 ); /* cancel alarm */

虽然使用 select 并不难 :)
您可能想了解 raw sockets也是。

关于c++ - C++ Linux 中的套接字超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com