1 #ifndef DROPBEAR_NETIO_H
2 #define DROPBEAR_NETIO_H
9 DROPBEAR_PRIO_DEFAULT
= 10,
10 DROPBEAR_PRIO_LOWDELAY
= 11,
11 DROPBEAR_PRIO_BULK
= 12,
14 void set_sock_nodelay(int sock
);
15 void set_sock_priority(int sock
, enum dropbear_prio prio
);
17 void get_socket_address(int fd
, char **local_host
, char **local_port
,
18 char **remote_host
, char **remote_port
, int host_lookup
);
19 void getaddrstring(struct sockaddr_storage
* addr
,
20 char **ret_host
, char **ret_port
, int host_lookup
);
21 int dropbear_listen(const char* address
, const char* port
,
22 int *socks
, unsigned int sockcount
, char **errstring
, int *maxfd
);
24 struct dropbear_progress_connection
;
26 /* result is DROPBEAR_SUCCESS or DROPBEAR_FAILURE.
27 errstring is only set on DROPBEAR_FAILURE, returns failure message for the last attempted socket */
28 typedef void(*connect_callback
)(int result
, int sock
, void* data
, const char* errstring
);
30 /* Always returns a progress connection, if it fails it will call the callback at a later point */
31 struct dropbear_progress_connection
* connect_remote (const char* remotehost
, const char* remoteport
,
32 connect_callback cb
, void *cb_data
);
34 /* Sets up for select() */
35 void set_connect_fds(fd_set
*writefd
);
36 /* Handles ready sockets after select() */
37 void handle_connect_fds(fd_set
*writefd
);
39 void remove_connect_pending(void);
41 /* Doesn't actually stop the connect, but adds a dummy callback instead */
42 void cancel_connect(struct dropbear_progress_connection
*c
);
44 void connect_set_writequeue(struct dropbear_progress_connection
*c
, struct Queue
*writequeue
);
46 /* TODO: writev #ifdef guard */
47 /* Fills out iov which contains iov_count slots, returning the number filled in iov_count */
48 void packet_queue_to_iovec(struct Queue
*queue
, struct iovec
*iov
, unsigned int *iov_count
);
49 void packet_queue_consume(struct Queue
*queue
, ssize_t written
);
51 #ifdef DROPBEAR_SERVER_TCP_FAST_OPEN
52 /* Try for any Linux builds, will fall back if the kernel doesn't support it */
53 void set_listen_fast_open(int sock
);
54 /* Define values which may be supported by the kernel even if the libc is too old */
56 #define TCP_FASTOPEN 23
59 #define MSG_FASTOPEN 0x20000000