I have 2 simple codes on Linux, cli.c and svr.c
Code:
// -------------------cli.c-----------------------------
int main()
{
int sock = socket(PF_INET, SOCK_STREAM, 0), csock;
SOCKADDR_IN sin, csin;
int csinsize = sizeof(csin), read;
char buf[4096];
Logi(sock);
sin.sin_family = PF_INET;
sin.sin_port = htons(3000);
sin.sin_addr.s_addr = inet_addr("192.168.10.10");
while (TRUE)
{
// csock = accept(sock, (PSOCKADDR) &csin, &csinsize);
Logi(connect(sock, (PSOCKADDR) &sin, sizeof(sin)));
while ((read = recv(sock, buf, 4096, 0)) > 0)
{
Log("read:");
Logi(read);
}
Log("Connect closed.");
}
return 0;
}
//-----------------svr.c--------------------------
int main()
{
int sock = socket(PF_INET, SOCK_STREAM, 0), csock;
SOCKADDR_IN sin, csin;
int csinsize = sizeof(csin), read;
char buf[4096];
#ifdef DAEMON
gLogfp = fopen("arpl", "w");
daemon(0, 0);
#endif
Logi(sock);
sin.sin_family = PF_INET;
sin.sin_port = htons(3000);
sin.sin_addr.s_addr = htonl(INADDR_ANY);
bzero(&sin.sin_zero, 8);
Logi(bind(sock, (PSOCKADDR) &sin, sizeof(sin)));
Logi(listen(sock, 10));
while (TRUE)
{
Logi(csock = accept(sock, (PSOCKADDR) &csin, &csinsize));
while ((read = recv(csock, buf, 4096, 0) > 0))
{
Log("read");
Logi(read);
}
Log("Connect closed.");
}
return 0;
}
Both client and server is run in daemon, and the socket is really established between each other. However, when I reboot the server(192.168.10.10), client could not feel this, it is still pending at the function recv, the socket is still established seen from netstat. Can anyone give me a hint? Thanks.