This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

screen: fhandler_socket::close() fails w/ Cygwin >= 1.5.15

I have a working build of screen for Cygwin; see  This version 
runs, but it won't reattach detached sessions (on either of my XP hosts) 
using Cygwin 1.5.15 or greater.  It will reattach sessions using Cygwin 
1.5.14 or earlier.  Here are the details:

When screen runs it forks off a child process that controls further 
children (e.g. shells) that run within the screen windows.  The parent is 
attached to the tty.  When the user detaches the session, the parent 
terminates but the child and its children stay running.

The parent and child screen processes communicate by a socket (since I 
disabled FIFOs in the build configuration).  With a session attached, I 

$ ls -l /tmp/uscreens/S-aschulma
total 1
srwx------  1 ASchulma None 53 May 17 12:46 4024.tty1.D77E1BASCHULMA1=

Here 4024 is the PID of the child process.  So far, so good.  Now, I issue 
the 'detach' command within the screen session.  Under Cygwin 1.5.14, I 
still see 

$ ls -l /tmp/uscreens/S-aschulma
total 1
srwx------  1 ASchulma None 53 May 17 12:46 4024.tty1.D77E1BASCHULMA1=

and I can reattach my session with no trouble.  But under Cygwin 1.5.15, 
after I detach I see

$ ls -l /tmp/uscreens/S-aschulma/
total 1
-rw-------  1 ASchulma None 53 May 17 12:51 4024.tty1.D77E1BASCHULMA1

_The socket is no longer a socket._  It has turned into a plain file.  And 
of course, I can't reattach my screen session, even though the child 
screen process is still running; screen says 'There is no screen to be 

I attached strace to the running parent and child processes, just before 
issuing the 'detach' command.  I did this separately using Cygwin 1.5.14 
and 1.5.15.  The logs are here:

(Note that I massaged these logs in order to reduce noise and make them 
easier to compare.  I removed the first two columns of timing data, and 
changed the PIDs and Thread handles in the 1.5.14 versions to match the 
ones in the 1.5.15 versions.)

Comparing the parent logs (I find CSdiff to be good for this), I don't see 
much difference.  With 1.5.14 there are a few extra calls to 
GetFileInformationByHandle and symlink.check_sysfile; that's about it.

In the child logs, these difference looks like the crucial ones (1.5.14 is 
on top, 1.5.15 below):

< [main] SCREEN 4024 fhandler_disk_file::utimes: incoming lastaccess 
428A1600 0002811D
< [main] SCREEN 4024 fhandler_base::close: closing 
'/tmp/uscreens/S-aschulma/4024.tty0.D77E1BASCHULMA1' handle 0x14C
> [main] SCREEN 4024 fhandler_base::utimes_fs: incoming lastaccess 
428A1544 0001D443
> [main] SCREEN 4024 __set_winsock_errno: close:1429 - winsock error 10038 
-> errno 108
> [main] SCREEN 4024 fhandler_socket::close: -1 = fhandler_socket::close()
< [select_socket] SCREEN 4024 thread_socket: Win32 select returned 1
< [select_socket] SCREEN 4024 thread_socket: s 0x10016978, testing fd 4 ()
< [select_socket] SCREEN 4024 thread_socket: read_ready

So as far as I can see at this point, the cause of the reattachment 
trouble appears to be a failure of fhandler_socket::close() in Cygwin >= 
1.5.15.  Is this Cygwin's fault, or screen's?  Or is it impossible to 

If anyone is interested, my current screen package is available for 


Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]