My speculation would be that the problem lies at a deeper level, which can be summarized as follows:
- Blocking mode refers to waiting until a file descriptor becomes readable/writable, but regular files are defined to always be readable/writable (granted appropriate permissions) — POSIX spec, IIRC. In other words, non-blocking I/O with regular files doesn't really make sense (it only makes sense for sockets, pipes, fifos, etc.)
- Something is made to appear as a regular file via the sshfs mount which in reality involves a potentially failing network connection. And (presumably) the non-blocking flag either simply isn't handled properly at the lower levels of the sshfs implementation (where it could possibly be determined if the operation would block), or it's already being ignored earlier on due to having been applied to a regular file.
In short, if an alarm doesn't even work with PERL_SIGNALS=unsafe (which would be the case, if the system call is in a non-interruptable state), I think all you can do is to create a second process/thread which is responsible for killing the other process in case it blocks for longer than a specified period.
The problem with this approach is, though, that if the watching process is the child, it would kill the main program in case of timeout (usually undesired). Or, the other way round, if the child is doing the potentially blocking operation, you wouldn't easily have access to the handle from the main program in case the open succeeds...
Once you've solved this issue, you can start thinking about portability.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.