home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
rox.zip
/
socket.rox
< prev
next >
Wrap
Text File
|
1993-08-26
|
4KB
|
187 lines
:class socket
:vars sock errno closed buffer cr lf crlf tab
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method init
cr = d2c(13)
lf = d2c(10)
crlf = cr || lf
tab = d2c(9)
closed = 0
buffer = ""
/*---------------------------------------------------------------
* initialize function package
*---------------------------------------------------------------*/
if RxFuncQuery("SockLoadFuncs") then
do
rc = RxFuncAdd("SockLoadFuncs","rxSock","SockLoadFuncs")
rc = SockLoadFuncs()
end
/*---------------------------------------------------------------
* handle case of initializing socket with a socket value
*---------------------------------------------------------------*/
if datatype(arg(1),"W") then
do
sock = arg(1)
errno = 0
return
end
sock = SockSocket("AF_INET","SOCK_STREAM","IPPROTO_TCP")
return
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method deinit
return SockClose(sock)
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method errno
return errno
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method closed
return closed
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method bindServer
port = arg(1)
server.!family = "AF_INET"
server.!port = port
server.!addr = "INADDR_ANY"
rc = SockBind(sock,"server.!")
if (rc = 0) then
rc = SockListen(sock,10)
return rc
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method acceptCLient
signal on halt
newSock = SockAccept(sock,"client.!")
if (newSock = -1) then
return ""
return RoxCreate("socket",newSock)
halt:
return ""
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method connectServer
host = arg(1)
port = arg(2)
/*---------------------------------------------------------------
* convert name to address, if needed
*---------------------------------------------------------------*/
if (0 <> verify(host,"0123456789.")) then
do
rc = SockGetHostByName(host,"addr.!")
if (rc <> 1) then
return -1
host = addr.!addr
end
addr.!family = "AF_INET"
addr.!port = port
addr.!addr = host
rc = SockConnect(sock,"addr.!")
return rc
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method sendString
string = arg(1)
origLen = length(string)
do while (string <> "")
rc = SockSend(sock,string)
if (rc = -1) then
return -1
if (rc = 0) then
do
closed = 1
return length(string)
end
string = substr(string,rc+1)
end
return 0
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method sendLine
string = arg(1) || crlf
return .sendString(self,string)
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method recv
rc = SockRecv(sock,"data",1000)
if (rc < 0) then
return ""
if (rc = 0) then
do
closed = 1
return ""
end
return data
:*------------------------------------------------------------------
:*
:*------------------------------------------------------------------
:method recvLine
line = buffer
do while (pos(crlf,line) = 0)
line = .recv(self)
if .closed(self) then
return line
end
parse var line line (crlf) buffer
return line