Browse Source

Fix error reporting and EAGAIN handling bug in net Write

Clarify some comments as well
v0.7.4-release
Bert Belder 14 years ago
parent
commit
1361e87e80
  1. 12
      src/node_net.cc

12
src/node_net.cc

@ -677,8 +677,9 @@ static Handle<Value> Read(const Arguments& args) {
} }
#else // __MINGW32__ #else // __MINGW32__
/* /*
* read() should work for in mingw, but always gives EINVAL; someone should really file a bug about it. * read() _should_ work for sockets in mingw, but always gives EINVAL;
* We'll use recv() however, it's faster as well. * someone should really file a bug about it.
* We'll use recv() for sockets however, it's faster as well.
*/ */
ssize_t bytes_read = recv(_get_osfhandle(fd), (char*)buffer_data + off, len, 0); ssize_t bytes_read = recv(_get_osfhandle(fd), (char*)buffer_data + off, len, 0);
@ -897,14 +898,15 @@ static Handle<Value> Write(const Arguments& args) {
} }
#else // __MINGW32__ #else // __MINGW32__
/* /*
* write() should work for sockets in mingw, but always gives EINVAL; someone should really file a bug about it. * write() _should_ work for sockets in mingw, but always gives EINVAL;
* We'll use send() however, it's faster as well. * someone should really file a bug about it.
* We'll use send() for sockets however, it's faster as well.
*/ */
ssize_t written = send(_get_osfhandle(fd), buffer_data + off, len, 0); ssize_t written = send(_get_osfhandle(fd), buffer_data + off, len, 0);
if (written < 0) { if (written < 0) {
int wsaErrno = WSAGetLastError(); int wsaErrno = WSAGetLastError();
if (errno == WSAEWOULDBLOCK || errno == WSAEINTR) { if (wsaErrno == WSAEWOULDBLOCK || wsaErrno == WSAEINTR) {
return scope.Close(Integer::New(0)); return scope.Close(Integer::New(0));
} }
return ThrowException(ErrnoException(wsaErrno, "write")); return ThrowException(ErrnoException(wsaErrno, "write"));

Loading…
Cancel
Save