windows fixes (Gregory Alexander)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1102 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2004-10-07 23:27:35 +00:00
parent 890fa6bebb
commit 02d2c54cd3
6 changed files with 42 additions and 15 deletions

View file

@ -152,7 +152,7 @@ soread(so)
nn = readv(so->s, (struct iovec *)iov, n);
DEBUG_MISC((dfd, " ... read nn = %d bytes\n", nn));
#else
nn = read(so->s, iov[0].iov_base, iov[0].iov_len);
nn = recv(so->s, iov[0].iov_base, iov[0].iov_len,0);
#endif
if (nn <= 0) {
if (nn < 0 && (errno == EINTR || errno == EAGAIN))
@ -176,7 +176,7 @@ soread(so)
* A return of -1 wont (shouldn't) happen, since it didn't happen above
*/
if (n == 2 && nn == iov[0].iov_len)
nn += read(so->s, iov[1].iov_base, iov[1].iov_len);
nn += recv(so->s, iov[1].iov_base, iov[1].iov_len,0);
DEBUG_MISC((dfd, " ... read nn = %d bytes\n", nn));
#endif
@ -333,7 +333,7 @@ sowrite(so)
DEBUG_MISC((dfd, " ... wrote nn = %d bytes\n", nn));
#else
nn = write(so->s, iov[0].iov_base, iov[0].iov_len);
nn = send(so->s, iov[0].iov_base, iov[0].iov_len,0);
#endif
/* This should never happen, but people tell me it does *shrug* */
if (nn < 0 && (errno == EAGAIN || errno == EINTR))
@ -349,7 +349,7 @@ sowrite(so)
#ifndef HAVE_READV
if (n == 2 && nn == iov[0].iov_len)
nn += write(so->s, iov[1].iov_base, iov[1].iov_len);
nn += send(so->s, iov[1].iov_base, iov[1].iov_len,0);
DEBUG_MISC((dfd, " ... wrote nn = %d bytes\n", nn));
#endif
@ -572,7 +572,11 @@ solisten(port, laddr, lport, flags)
close(s);
sofree(so);
/* Restore the real errno */
#ifdef _WIN32
WSASetLastError(tmperrno);
#else
errno = tmperrno;
#endif
return NULL;
}
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));
@ -643,7 +647,9 @@ sofcantrcvmore(so)
{
if ((so->so_state & SS_NOFDREF) == 0) {
shutdown(so->s,0);
FD_CLR(so->s, global_writefds);
if(global_writefds) {
FD_CLR(so->s,global_writefds);
}
}
so->so_state &= ~(SS_ISFCONNECTING);
if (so->so_state & SS_FCANTSENDMORE)
@ -657,9 +663,13 @@ sofcantsendmore(so)
struct socket *so;
{
if ((so->so_state & SS_NOFDREF) == 0) {
shutdown(so->s,1); /* send FIN to fhost */
FD_CLR(so->s, global_readfds);
FD_CLR(so->s, global_xfds);
shutdown(so->s,1); /* send FIN to fhost */
if (global_readfds) {
FD_CLR(so->s,global_readfds);
}
if (global_xfds) {
FD_CLR(so->s,global_xfds);
}
}
so->so_state &= ~(SS_ISFCONNECTING);
if (so->so_state & SS_FCANTRCVMORE)