Re: Volunteering to be RM, WAS: RE: Release 2.0.36 (fwd)

2002-04-23 Thread Jim Jagielski
Forwarded message:
> 
> Justin Erenkrantz wrote:
> > 
> > The reason I suggested a hold to Sander on account of the atomics
> > is that we have a bunch of PRs relating to building atomics on
> > Solaris that haven't been (yet) resolved.
> > 
> 
> Hold on a tic... I think I see it... On the systems that fail,
> I bet they are using GNUas. If so, then ASCPP is 'gcc -E' and thus
> the modification of apr_atomic_sparc.s to apr_atomic_sparc.S fails.
> If not using GNUas, apr_atomic_sparc.S simply *is* apr_atomic_sparc.s.
> So, the problem is what is it in apr_atomic_sparc.s that makes GNUas
> barf.
> -- 
> ===
>Jim Jagielski   [|]   [EMAIL PROTECTED]   [|]   http://www.jaguNET.com/
>   "A society that will trade a little liberty for a little order
>  will lose both and deserve neither" - T.Jefferson
> 


-- 
===
   Jim Jagielski   [|]   [EMAIL PROTECTED]   [|]   http://www.jaguNET.com/
  "A society that will trade a little liberty for a little order
 will lose both and deserve neither" - T.Jefferson


[PATCH] Re: Resend ([Q] apr_poll_revents_get() before apr_accept() on Windows)

2002-04-23 Thread Saxon
Thanks INOUE - I was going to repost it myself in a few days :)

Here's the patch again in case the old one is missing / too hard to find:


--- apr/network_io/win32/poll.c.old Mon Mar 25 16:37:46 2002
+++ apr/network_io/win32/poll.c Mon Mar 25 16:38:53 2002
@@ -156,6 +156,9 @@
 DWORD dummy;
 DWORD flags = MSG_PEEK;

+BOOL optval;
+int optlen;
+
 /* We just want to PEEK at the data, so I am setting up a dummy WSABUF
  * variable here.
  */
@@ -164,27 +167,45 @@

 if (FD_ISSET(sock->sock, aprset->read)) {
 revents |= APR_POLLIN;
-if (WSARecv(sock->sock, &data, 1, &dummy, &flags, NULL,
-NULL) == SOCKET_ERROR) {
-/* This is only legit since we don't return the error */
-dummy = WSAGetLastError();
-switch (dummy) {
-case WSAECONNRESET:
-case WSAECONNABORTED:
-case WSAESHUTDOWN:
-case WSAENETRESET: {
-revents ^= APR_POLLIN;
-revents |= APR_POLLHUP;
-break;
-}
-case WSAENOTSOCK: {
-revents ^= APR_POLLIN;
-revents |= APR_POLLNVAL;
-}
-default: {
-revents ^= APR_POLLIN;
-revents |= APR_POLLERR;
+
+/* Check if the socket is listening for a connection (SO_ACCEPTCONN
+ * is true) - if it is we just leave APR_POLLIN in revents and
+ * don't attempt the WSARecv, since it would return WSAENOTCONN.
+ */
+optlen = sizeof(optval);
+getsockopt(sock->sock, SOL_SOCKET, SO_ACCEPTCONN, (char *)&optval,
+&optlen);
+if (!optval) {
+/* The socket is not listening */
+if (WSARecv(sock->sock, &data, 1, &dummy, &flags, NULL,
+NULL) == SOCKET_ERROR) {
+/* This is only legit since we don't return the error */
+dummy = WSAGetLastError();
+switch (dummy) {
+case WSAECONNRESET:
+case WSAECONNABORTED:
+case WSAESHUTDOWN:
+case WSAENETRESET: {
+revents ^= APR_POLLIN;
+revents |= APR_POLLHUP;
+break;
+}
+case WSAENOTSOCK: {
+revents ^= APR_POLLIN;
+revents |= APR_POLLNVAL;
+}
+default: {
+revents ^= APR_POLLIN;
+revents |= APR_POLLERR;
+}
 }
+}
+else if ((dummy == 0) && (sock->type == SOCK_STREAM)) {
+/* Zero bytes received (dummy is the number of bytes)
+ * from a stream socket indicates graceful shutdown.
+ */
+revents ^= APR_POLLIN;
+revents |= APR_POLLHUP;
 }
 }
 }



bye,
Saxon Druce ([EMAIL PROTECTED])

- Original Message -
From: "INOUE Seiichiro" <[EMAIL PROTECTED]>
To: 
Sent: Monday, April 22, 2002 11:31 PM
Subject: Resend ([Q] apr_poll_revents_get() before apr_accept() on Windows)


> Hi,
>
> I formerly sent a question about the issue on Subject.
> For my post, Mr. Saxon showed his patch, but the patch hasn't been
committed yet.
>
> What is goint on?
>
> Thanks.
>
>
> > - My Original Message -
> > From: "INOUE Seiichiro" <[EMAIL PROTECTED]>
> > To: 
> > Sent: Monday, March 25, 2002 12:32 AM
> > Subject: [Q] apr_poll_revents_get() before apr_accept() on Windows
> > > Hi,
> > >
> > > I have a question about apr_poll_revents_get() behavior on Windows.
> > > I want to check whether the socket is apr_accept()'able.
> > > On Unix, I can check the socket becomes readable by apr_poll().
> > > On Windows, when I do the same thing, apr_poll_revents_get() returns
> > APR_POLLERR.
> > >
> > > In apr_poll_revents_get(), WSARecv() causes WSAENOTCONN,
> > > if the socket hasn't been apr_accept()'ed yet.
> > > (Windows2000 case. I don't know other Windows.)
> > >
> > > I attach a sample program for an easy reproduction.
> > >
> > > My question is,
> > > What is a proper solution?
> > > libapr should take care of it, or applications should?
> > >
> > > Thanks in advance.
> > >
> > > - INOUE Seiichiro <[EMAIL PROTECTED]>
> > >   http://www.ariel-networks.com