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
));
56 for (c
= client_list
.next
; c
!= &client_list
; c
= c
->next
) {
60 int ret
= recv (c
->fd
, buffer
, 1500, 0);
63 if (!client_handle (c
, buffer
, ret
))
74 if ((mainsocket
= socket (AF_INET
, SOCK_STREAM
, IPPROTO_TCP
)) == -1) {
75 printf ("Cant create socket\n");
79 // 1) Family of protocols
80 sockserver
.sin_family
= AF_INET
;
81 // 2) Set number of listen port
82 sockserver
.sin_port
= htons (port
);
83 // 3) Listen IP address
84 sockserver
.sin_addr
.s_addr
= INADDR_ANY
;
86 unsigned long yes
= 1;
87 setsockopt (mainsocket
, SOL_SOCKET
, SO_REUSEADDR
, (char *) &yes
, sizeof (yes
));
90 if (bind (mainsocket
, (struct sockaddr
*) &sockserver
, sizeof (sockserver
)) == -1) {
91 printf ("bind () - port is used\n");
95 // Create queue for accept
96 if (listen (mainsocket
, 10) == -1) {
97 printf ("ERROR -> listen () == -1\n");
101 // set mainSocket to non-blocking mode
102 int oldFlag
= fcntl (mainsocket
, F_GETFL
, 0);
103 if (fcntl (mainsocket
, F_SETFL
, oldFlag
| O_NONBLOCK
) == -1) {
104 printf ("Cant set socket to nonblocking mode\n");