1 #include "tcp_socket.h"
8 /* private functions */
9 tcp_socket
* tcp_socket_accept(tcp_socket
*socket
);
11 tcp_socket
* tcp_socket_new(tcp_socket_error_cb error_cb
)
13 tcp_socket
*s
= g_new0(tcp_socket
, 1);
15 s
->fd
= socket(PF_INET
, SOCK_STREAM
, 0);
16 s
->error_cb
= error_cb
;
17 fcntl(s
->fd
, F_SETFL
, O_NONBLOCK
);
22 void tcp_socket_free(tcp_socket
*socket
)
24 tcp_socket_close(socket
);
28 void tcp_socket_close(tcp_socket
*socket
)
33 char* tcp_socket_address(tcp_socket
*socket
)
37 getpeername(socket
->fd
, (struct sockaddr
*)&(socket
->sockaddr
), &addrlen
);
38 return inet_ntoa(socket
->sockaddr
.sin_addr
);
41 void tcp_socket_listen (tcp_socket
*socket
, char *address
, int port
, int backlog
)
43 const int buf_size
= 4096;
45 socket
->sockaddr
.sin_family
= AF_INET
;
46 socket
->sockaddr
.sin_port
= htons(port
);
47 inet_aton(address
, &(socket
->sockaddr
.sin_addr
));
49 setsockopt(socket
->fd
, SOL_SOCKET
, SO_SNDBUF
, &buf_size
, sizeof(int));
51 bind(socket
->fd
, (struct sockaddr
*)&(socket
->sockaddr
), sizeof(socket
->sockaddr
));
52 listen(socket
->fd
, backlog
);
55 tcp_socket
* tcp_socket_accept(tcp_socket
*socket
)
57 tcp_socket
*client_socket
= g_new0(tcp_socket
, 1);
60 client_socket
->error_cb
= socket
->error_cb
;
61 client_socket
->fd
= accept(socket
->fd
, (struct sockaddr
*)&(client_socket
->sockaddr
), &len
);
62 // if(client_socket->fd < 0) { error }
63 fcntl(client_socket
->fd
, F_SETFL
, O_NONBLOCK
);
75 socket
= tcp_socket_new(0);
76 tcp_socket_free(socket
);
78 socket
= tcp_socket_new(0);
79 tcp_socket_listen(socket
, "0.0.0.0", 3001, 1024);
80 system("telnet localhost 3001");
82 tcp_socket_free(socket
);
85 printf("hello world\n");