Ik heb een stukje code dat ergens data vandaan haalt, dit parsed en dan doorstuurt naar een client die ermee verbonden is. Dit doe ik door een fork() waarbij de parent de data ophaalt en parsed en via een pipe doorstuurt naar de child. Deze wacht tot er data binnenkomt, kijkt dan via select() of er een client wil connecten, zo ja wordt die verbinding geaccepteerd en wordt de data via send() doorgestuurd. Dit werkt prima totdat de client disconnect, de code blijft dan hangen omdat de send() blockt. Nu heb ik mbv fcntl deze socket al op non blocking gezet, kijk met select of ik mag schrijven en doe een poll() erop maar toch blijft ie blocken. Code:
Iemand enig idee wat ik verkeerd doe dus?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| if(datasock!=-1)
{
//check if we can send to datasock
tv.tv_sec=0;
tv.tv_usec=0;
tempfdset=master;
if((nsel=select(fdmax+1, NULL, &tempfdset, NULL, &tv))==-1)
{
fprintf(stderr, "Failure selecting\n");
}
if(FD_ISSET(datasock, &tempfdset))
{
printf("Start send %d\n",nsel); //nsel is hier altijd 1
pollset.fd=datasock;
pollset.events=POLLOUT;
printf("poll%d\n", poll(&pollset, 1, 100));//Dit print ook netjes 1
if(send(datasock, framebuffer, nbytes, 0)==-1)//Deze functie call blockt dus
{
printf("\nD'oh! Failure sending\n");
}
printf("End send\n");
}
else
{
printf("cant send to datasock\n");
}
}
} |
Iemand enig idee wat ik verkeerd doe dus?
[ Voor 6% gewijzigd door ekoopman op 21-08-2005 14:44 ]