{These are just a couple of handy routines. Not part of the winsock api, but useful with it. } UNIT wsockhlp; { helper routines that aren't part of the spec, but are handy } { darryl luff 14Nov95 } interface USES Winsock; FUNCTION SockErrorStr(e : Longint): String; FUNCTION SetBlocking(s : TSocket; sw : Boolean): Integer; implementation FUNCTION SetBlocking(s : TSocket; sw : Boolean): Integer; { sets the blocking state on a socket } VAR cmd, argp : Longint; BEGIN cmd := FIONBIO; argp := Word(sw); SetBlocking := ioctlsocket(s, cmd, argp); END; FUNCTION SockErrorStr(e : Longint): String; { returns an error string for } { the winsock error number } VAR s : String; BEGIN CASE e OF WSAEINTR : s := ''; WSAEBADF : s := ''; WSAEACCES : s := ''; WSAEFAULT : s := ''; WSAEINVAL : s := ''; WSAEMFILE : s := ''; { windows sockets definitions of regular berkeley error constants } WSAEWOULDBLOCK : s := 'WouldBlock'; WSAEINPROGRESS : s := 'InProgress'; WSAEALREADY : s := 'Already'; WSAENOTSOCK : s := 'NotSock'; WSAEDESTADDRREQ : s := 'DestAddrReq'; WSAEMSGSIZE : s := 'MsgSize'; WSAEPROTOTYPE : s := 'ProtoType'; WSAENOPROTOOPT : s := 'NoProtoOpt'; WSAEPROTONOSUPPORT : s := 'ProtoNoSupport'; WSAESOCKTNOSUPPORT : s := 'SocktNoSupport'; WSAEOPNOTSUPP : s := 'OpNotSupp'; WSAEPFNOSUPPORT : s := 'PFNoSupport'; WSAEAFNOSUPPORT : s := 'AFNoSupport'; WSAEADDRINUSE : s := 'AddrInUse'; WSAEADDRNOTAVAIL : s := 'AddrNotAvail'; WSAENETDOWN : s := 'NetDown'; WSAENETUNREACH : s := 'NetUnreach'; WSAENETRESET : s := 'NetReset'; WSAECONNABORTED : s := 'ConnAborted'; WSAECONNRESET : s := 'ConnReset'; WSAENOBUFS : s := 'NoBuffs'; WSAEISCONN : s := 'IsConn'; WSAENOTCONN : s := 'NotConn'; WSAESHUTDOWN : s := 'ShutDown'; WSAETOOMANYREFS : s := 'TooManyRefs'; WSAETIMEDOUT : s := 'TimedOut'; WSAECONNREFUSED : s := 'ConnRefused'; WSAELOOP : s := 'Loop'; WSAENAMETOOLONG : s := 'NameNotLong'; WSAEHOSTDOWN : s := 'HostDown'; WSAEHOSTUNREACH : s := 'HostUnreach'; WSAENOTEMPTY : s := 'NotEmpty'; WSAEPROCLIM : s := 'Proclim'; WSAEUSERS : s := 'Users'; WSAEDQUOT : s := 'DQuot'; WSAESTALE : s := 'Stale'; WSAEREMOTE : s := 'Remote'; { extended windows sockets error constant definitions } WSASYSNOTREADY : s := 'SysNotReady'; WSAVERNOTSUPPORTED : s := 'VerNotSupported'; WSANOTINITIALISED : s := 'NotInitialised'; { error return codes from gethostbyname() and gethostbyaddr() } { (when using the resolver). note that these errors are } { retrieved via WSAGetLastError() and must therefore follow } { the rules for avoiding clashes with error numbers from } { specific implementations or language run-time systems. for } { this reason the codes are based at WSABASEERR+1001. note } { also that [WSA]NO_ADDRESS is defined only for compatibility } { purposes. } { authoritative answer: Host not found } WSAHOST_NOT_FOUND : s := 'Host Not Found'; { non-authoritative: Host not found, or SERVERFAIL } WSATRY_AGAIN : s := 'Host not found - try again'; { non-recoverable errors, FORMERR, REFUSED, NOTIMP } WSANO_RECOVERY : s := 'Unrecoverable error'; { valid name, no data record of requested type } WSANO_DATA : s := 'Valid name but no data'; WSANO_ADDRESS : s := 'No address, look for MX record'; ELSE s := '' END; SockErrorStr := s END; END.