int mr_accept(int s, struct sockaddr_in *sin)
{
- int conn, addrlen = sizeof(struct sockaddr_in), nread, status;
+ int conn = -1, addrlen = sizeof(struct sockaddr_in), nread, status;
char *buf = NULL;
- conn = accept(s, (struct sockaddr *)sin, &addrlen);
- if (conn < 0)
- return -1;
+ while (conn < 0)
+ {
+ conn = accept(s, (struct sockaddr *)sin, &addrlen);
+ if (conn < 0 && errno != EINTR)
+ return -1;
+ }
do
status = mr_cont_accept(conn, &buf, &nread);