⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timeoutconn.c

📁 linux下qmail的源码 本人加了一些注释
💻 C
字号:
#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include "ndelay.h"#include "select.h"#include "error.h"#include "readwrite.h"#include "ip.h"#include "byte.h"#include "timeoutconn.h"int timeoutconn(s,ip,port,timeout)int s;struct ip_address *ip;unsigned int port;int timeout;{  char ch;  struct sockaddr_in sin;  char *x;  fd_set wfds;  struct timeval tv;   byte_zero(&sin,sizeof(sin));  byte_copy(&sin.sin_addr,4,ip);  x = (char *) &sin.sin_port;  x[1] = port; port >>= 8; x[0] = port;  sin.sin_family = AF_INET;   if (ndelay_on(s) == -1) return -1;   /* XXX: could bind s */   if (connect(s,(struct sockaddr *) &sin,sizeof(sin)) == 0) {    ndelay_off(s);    return 0;  }  if ((errno != error_inprogress) && (errno != error_wouldblock)) return -1;   FD_ZERO(&wfds);  FD_SET(s,&wfds);  tv.tv_sec = timeout; tv.tv_usec = 0;   if (select(s + 1,(fd_set *) 0,&wfds,(fd_set *) 0,&tv) == -1) return -1;  if (FD_ISSET(s,&wfds)) {    int dummy;    dummy = sizeof(sin);    if (getpeername(s,(struct sockaddr *) &sin,&dummy) == -1) {      read(s,&ch,1);      return -1;    }    ndelay_off(s);    return 0;  }   errno = error_timeout; /* note that connect attempt is continuing */  return -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -