ucspi-ssl  0.99e
TLS encryption for IPv6 communication
timeoutconn6.c
Go to the documentation of this file.
1 #include "ndelay.h"
2 #include "socket.h"
3 #include "iopause.h"
4 #include "error.h"
5 #include "timeoutconn.h"
6 
7 int timeoutconn6(int s,char ip[16],uint16 port,unsigned int timeout,uint32 netif)
8 {
9  struct taia now;
10  struct taia deadline;
11  iopause_fd x;
12 
13  if (socket_connect6(s,ip,port,netif) == -1) {
14  if ((errno != error_wouldblock) && (errno != error_inprogress)) return -1;
15  x.fd = s;
16  x.events = IOPAUSE_WRITE;
17  if (taia_now(&now) == -1) {
18  errno = error_timeout;
19  return -1;
20  }
21  taia_uint(&deadline,timeout);
22  taia_add(&deadline,&now,&deadline);
23  for (;;) {
24  if (taia_now(&now) == -1) {
25  errno = error_timeout;
26  return -1;
27  }
28  iopause(&x,1,&deadline,&now);
29  if (x.revents) break;
30  if (taia_less(&deadline,&now)) {
31  errno = error_timeout; /* note that connect attempt is continuing */
32  return -1;
33  }
34  }
35  if (!socket_connected(s)) return -1;
36  }
37 
38  if (ndelay_off(s) == -1) return -1;
39  return 0;
40 }
Definition: taia.h:8
int iopause(iopause_fd *x, unsigned int len, struct taia *deadline, struct taia *stamp)
Definition: iopause.c:7
int socket_connect6(int s, const char *ip, uint16 port, uint32 scope_id)
int timeoutconn6(int s, char ip[16], uint16 port, unsigned int timeout, uint32 netif)
Definition: timeoutconn6.c:7
int error_wouldblock
Definition: error.c:64
int taia_now(struct taia *)
Definition: taia_now.c:8
int taia_less(const struct taia *, const struct taia *)
Definition: taia_less.c:7
void taia_add(struct taia *, const struct taia *, const struct taia *)
Definition: taia_add.c:7
uint32 netif
Definition: sslclient.c:84
void taia_uint(struct taia *, unsigned int)
Definition: taia_uint.c:7
int ndelay_off(int)
Definition: ndelay_off.c:11
int socket_connected(int)
Definition: socket_conn.c:21
unsigned short uint16
Definition: uint16.h:4
int error_timeout
Definition: error.c:50
int error_inprogress
Definition: error.c:57
unsigned long timeout
Definition: sslhandle.c:67