in reply to Re: Checking if a non-blocking socket is active
in thread Checking if a non-blocking socket is active

Thankyou very much for this code snipit ikegami! its been very helpful.

Unfortunately, on my system I'm finding that when sysread attempts to read more data than is available at that point in time, its setting $! to A non-blocking socket operation could not be completed immediately.. As such, the program flow falls into the first else block in your code, which is intended for "real" errors.

I went searching for the list of available Errno codes, and found the errno.h header file for my distribution. Its contents are in the readmore.

Questions:How should I handle this situation? I'm not sure which Errno (if any) correspond to this scenario.

Is this where IO::Select comes in?

(If relevent, my system is Win2k8 64bit, strawberry perl 5.14.2)

/** * This file has no copyright assigned and is placed in the Public Dom +ain. * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this p +ackage. */ #ifndef _INC_ERRNO #define _INC_ERRNO #include <_mingw.h> #ifdef __cplusplus extern "C" { #endif #ifndef _CRT_ERRNO_DEFINED #define _CRT_ERRNO_DEFINED _CRTIMP extern int *__cdecl _errno(void); #define errno (*_errno()) errno_t __cdecl _set_errno(int _Value); errno_t __cdecl _get_errno(int *_Value); #endif /* _CRT_ERRNO_DEFINED */ #define EPERM 1 #define ENOENT 2 #define ENOFILE ENOENT #define ESRCH 3 #define EINTR 4 #define EIO 5 #define ENXIO 6 #define E2BIG 7 #define ENOEXEC 8 #define EBADF 9 #define ECHILD 10 #define EAGAIN 11 #define ENOMEM 12 #define EACCES 13 #define EFAULT 14 #define EBUSY 16 #define EEXIST 17 #define EXDEV 18 #define ENODEV 19 #define ENOTDIR 20 #define EISDIR 21 #define ENFILE 23 #define EMFILE 24 #define ENOTTY 25 #define EFBIG 27 #define ENOSPC 28 #define ESPIPE 29 #define EROFS 30 #define EMLINK 31 #define EPIPE 32 #define EDOM 33 #define EDEADLK 36 #define ENAMETOOLONG 38 #define ENOLCK 39 #define ENOSYS 40 #define ENOTEMPTY 41 #ifndef RC_INVOKED #if !defined(_SECURECRT_ERRCODE_VALUES_DEFINED) #define _SECURECRT_ERRCODE_VALUES_DEFINED #define EINVAL 22 #define ERANGE 34 #define EILSEQ 42 #define STRUNCATE 80 #endif #endif #define EDEADLOCK EDEADLK #ifdef __cplusplus } #endif #endif