5 #include <sys/socket.h>
10 struct sockaddr_in sockserver
;
11 struct sockaddr_in sockclient
;
15 extern client_t client_list
;
17 int net_send (int fd
, char *str
, unsigned len
)
19 int oldFlag
= fcntl (fd
, F_GETFL
, 0);
20 if (fcntl (fd
, F_SETFL
, oldFlag
& ~O_NONBLOCK
) == -1) {
21 printf ("Cant set socket to blocking mode\n");
25 int ret
= send (fd
, str
, len
, 0);
27 oldFlag
= fcntl (fd
, F_GETFL
, 0);
28 if (fcntl (fd
, F_SETFL
, oldFlag
| O_NONBLOCK
) == -1) {
29 printf ("Cant set socket to nonblocking mode\n");
38 int newfd
= accept (mainsocket
, (struct sockaddr
*) &sockclient
, &addrlen
);
41 printf ("> New client connected fd (%d) - %s\n", newfd
, inet_ntoa (sockclient
.sin_addr
));
58 for (c
= client_list
.next
; c
!= &client_list
; c
= c
->next
) {
62 int ret
= recv (c
->fd
, buffer
, 1500, 0);
65 if (!client_handle (c
, buffer
, ret
))
76 if ((mainsocket
= socket (AF_INET
, SOCK_STREAM
, IPPROTO_TCP
)) == -1) {
77 printf ("Cant create socket\n");
81 // 1) Family of protocols
82 sockserver
.sin_family
= AF_INET
;
83 // 2) Set number of listen port
84 sockserver
.sin_port
= htons (port
);
85 // 3) Listen IP address
86 sockserver
.sin_addr
.s_addr
= INADDR_ANY
;
88 unsigned long yes
= 1;
89 setsockopt (mainsocket
, SOL_SOCKET
, SO_REUSEADDR
, (char *) &yes
, sizeof (yes
));
92 if (bind (mainsocket
, (struct sockaddr
*) &sockserver
, sizeof (sockserver
)) == -1) {
93 printf ("bind () - port is used\n");
97 // Create queue for accept
98 if (listen (mainsocket
, 10) == -1) {
99 printf ("ERROR -> listen () == -1\n");
103 // set mainSocket to non-blocking mode
104 int oldFlag
= fcntl (mainsocket
, F_GETFL
, 0);
105 if (fcntl (mainsocket
, F_SETFL
, oldFlag
| O_NONBLOCK
) == -1) {
106 printf ("Cant set socket to nonblocking mode\n");