why it can not access the destination Host when the network cable is disconnected for a moment and later this connected again?
//---------------------------------------------------------------------------- // Thread 'Server': BSD Server socket process //---------------------------------------------------------------------------- static void Server (void const *arg) { SOCKADDR_IN addr; int sock, sd, res; int type = (int)arg; char dbuf[4];
while (1) { sock = socket (AF_INET, type, 0); addr.sin_port = htons(PORT_NUM); addr.sin_family = PF_INET; addr.sin_addr.s_addr = INADDR_ANY; bind (sock, (SOCKADDR *)&addr, sizeof(addr)); if (type == SOCK_STREAM) { listen (sock, 1); sd = accept (sock, NULL, NULL); closesocket (sock); sock = sd; } while (1) { res = recv (sock, dbuf, sizeof (dbuf), 0); if (res <= 0) { break; } if (dbuf[0] == BLINKLED) { LED_Out (dbuf[1]); } } closesocket (sock); } }
This is example code:
//---------------------------------------------------------------------------- // Thread 'Server': BSD Server socket process //----------------------------------------------------------------------------
static void Server (void const *arg) {
SOCKADDR_IN addr;
int sock, sd, res;
int type = (int)arg;
char dbuf[4];
while (1) {
sock = socket (AF_INET, type, 0);
addr.sin_port = htons(PORT_NUM);
addr.sin_family = PF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
bind (sock, (SOCKADDR *)&addr, sizeof(addr));
if (type == SOCK_STREAM) {
listen (sock, 1);
sd = accept (sock, NULL, NULL);
closesocket (sock);
sock = sd;
}
res = recv (sock, dbuf, sizeof (dbuf), 0);
if (res <= 0) {
break;
if (dbuf[0] == BLINKLED) {
LED_Out (dbuf[1]);
Are you using a fixed IP number or DHCP? That often matters when a TCP/IP stack reacts to link loss.
yes, i'm using a fixed IP number
That and how the unspecified host reacts to the change, a) by getting an interrupt or whatever, and b) by reprogramming the PHY and renegotiating the link to the switch/hub
Please see also Posting Tips about using the PRE tags for source code.
Where did it come from?
The trouble with "example code" or "sample code" is that it often just handles the "normal" case - so it may well not be designed to cope with this scenario.
In software projects in general - and comms in particular - the "normal" case is the easy bit; it's handling the "exceptions" properly that takes most of the work!
The 90:10 Rule:
www.8052.com/.../182513
www.8052.com/.../81002
www.8052.com/.../76017
en.wikipedia.org/.../Ninety-ninety_rule