Написал сервер с сокетом, но чё-то всё не так, как надо идёт:
Сервер должен сначало получать от клиента запрос, после получения такового он соответсвенно ему выдаёт нужную инфу клиенту, трудность заключается в том, как сделать так, чтобы клиенту каждый раз не надо было отсоедниняться и в любой момент можно было получить информацию???вот часть кода:
.......................
for ( ; ; ) {if((client_so = accept(server_so, (struct sockaddr*)&client_address, (socklen_t *)&sock_size)) == -1) {
shutdown(server_so, 0);
printf("Can't ACCEPT connection\n");
return -1;
}
else {
char buf[NET_BUF_SIZE];//Get action
recv(client_so, buf, NET_BUF_SIZE, 0);//Send number of records
char n[NET_BUF_SIZE];
int nums = baseNums();
sprintf(n, "%i", nums);
send(client_so, n, NET_BUF_SIZE, 0);switch(atoi(buf)) {
case GET_IP:
for (int i = 1; i <= nums; i++) {
baseRead(i, IP, buf);
send(client_so, buf, NET_BUF_SIZE, 0);
}break;
case GET_ACCESS:
for (int i = 1; i <= nums; i++) {
baseRead(i, ACCESS, buf);
send(client_so, buf, NET_BUF_SIZE, 0);
}break;
}
}}
shutdown(server_so, 2);
........................
В простейшем случае - fork. В родителе закрываешь новое соединение и возвращаешься на прослушивание. В потомке в цикле общаешься, пока соединение не будет закрыто тобой или им.PS. Заодно узнаешь, как от зомби избавляться :)
>В простейшем случае - fork. В родителе закрываешь новое соединение и возвращаешься
>на прослушивание. В потомке в цикле общаешься, пока соединение не будет
>закрыто тобой или им.
>
>PS. Заодно узнаешь, как от зомби избавляться :)
Тоесть получается в цыкл нужно ещё загонять и обмен сообщениями, но как тогда проверить не отсоединился ли клиет?И куда припхнуть этот fork??? ;)))
>>В простейшем случае - fork. В родителе закрываешь новое соединение и возвращаешься
>>на прослушивание. В потомке в цикле общаешься, пока соединение не будет
>>закрыто тобой или им.
>>
>>PS. Заодно узнаешь, как от зомби избавляться :)
>
>
>Тоесть получается в цыкл нужно ещё загонять и обмен сообщениями, но как
>тогда проверить не отсоединился ли клиет?
>
>И куда припхнуть этот fork??? ;)))
пачитай маны по fork он толька разделяєт працес.
тоєсть от так
|
/ \
1 2
| |
тепер ани 2 различниє процесси. Икогда ти папробуєш записать в
закририй сокет он тебе скажет))))
он может вилетать по таймауту то сматри.
Как использовать fork я так и не понял, но с select вроде всё идёт ;)