Ang*_*.47 8 c++ sockets linux timeout
好吧首先,我想提一下我正在做什么是完全道德的,是的我是端口扫描.
当端口打开时程序运行正常,但是当我到达一个关闭的套接字时,程序会暂停很长时间,因为没有超时条款.以下是以下代码
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"; }
}
Run Code Online (Sandbox Code Playgroud)
我在堆栈溢出时发现了这个但是使用select()命令对我来说没有意义.
问题是我们可以使connect()函数超时,所以我们不等一年它才能返回错误?
最简单的是设置一个alarm,并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 */
Run Code Online (Sandbox Code Playgroud)
尽管使用select并不困难:)
你可能也想了解原始套接字.
| 归档时间: |
|
| 查看次数: |
17966 次 |
| 最近记录: |