WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

s... Socket Functions

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Close Orphaned Socket Connections


The Winsock Listener and Connector scripts in the help file have a problem. In order to break out of the listener script you must press CTRL BREAK. This leaves a socket open, because there is no way to capture the CTRL Break. I put together some code that check to see if a socket was orphaned from a previus run the script.

BoxOpen("CRC Checker.  Listening",StrCat("Checking file ",@CRLF)) 
CRCFILE="C:\TEMP\CRCFILE.TXT" 
If !DirExist("C:\TEMP") then DirMake("C:\TEMP") 
PORTNUMBER=989 
AddExtender("wwwsk34i.dll") 
AddExtender("WWWNT34i.DLL") 
If RegExistValue(@REGMACHINE,"Software\BMO[SMPortNum]") then 
        PortNum=RegQueryValue(@REGMACHINE,"Software\BMO[SMPortNum]") 
        If PortNum<>"" then SuccessValue=sClose(PortNum) 
EndIf 
listensocket=sOpen() 
sListen(listensocket, PORTNUMBER) 
RegSetValue(@REGMACHINE,"Software\BMO[SMPortNum]",listensocket) 
Served=0 
While 1 
        datasocket=sAccept(listensocket, @TRUE)        ;Block for connection 
        if datasocket then 
                GoSub ProcessConnect 
        Else 
                sClose(listensocket) 
                msg=wxGetLastErr() 
                Message("Socket Error", msg) 
                exit 
        endif 
        if iskeydown(@ctrl) 
                sClose(listensocket) 
                RegSetValue(@REGMACHINE,"Software\BMO[SMPortNum]","") 
                exit 
        endif 
endwhile 
BoxShut() 
sClose(listensocket) 
RegSetValue(@REGMACHINE,"Software\BMO[SMPortNum]","") 
exit 
  
:ProcessConnect 
ENTRY=sRecvLine(datasocket, 256) 
if ENTRY=="END" then 
        Boxtext(ENTRY) 
        sClose(datasocket) 
        sClose(listensocket) 
        RegSetValue(@REGMACHINE,"Software\BMO[SMPortNum]","") 
        boxshut() 
        EXIT 
Endif 
BoxText(ENTRY) 
;Do your thing here!!! 
SPOT=StrIndex(ENTRY,"$\",1,@FWDSCAN) 
SHARE=StrSub(ENTRY,1,SPOT) 
HANDEDFILE=StrSub(ENTRY,SPOT+2,-1) 

Spot=StrIndex(Share,"\",3,@FWDSCAN) 
;Server=StrSub(Share,1,Spot-1) 
;If StrSub(Share,1,2) == "\\" then Server=StrSub(Share,3,Spot-3) 
Share=StrSub(Share,Spot+1,-1) 
LocalShare = wntShareInfo("", Share, 0, 1) 
FileToCRC=StrCat(localshare,"\",handedfile) 
GoSub ProcessCRC 

sSendLine(datasocket,CRCVALUE) 
sClose(datasocket) 
return 

:ProcessCRC                                         
RunHideWait(`CRCMAN.EXE`,`-r -b %CRCFILE% "%FileToCRC%"`) 
;Read CRCFile 
If !FileExist(CRCFILE) then message("Warning!! ","CRCFILE Missing!!") 
CRCHandle=FileOpen(CRCFILE, "READ") 
CRCRead=FileRead(CRCHandle) 
Spot=StrIndex(CRCREAD," ",1,@FWDSCAN) 
CRCValue=StrSub(CRCREAD,1,Spot-1) 
CRCTARGET=StrTrim(StrUpper(StrSub(CRCREAD,SPOT+1,-1))) 
If StrTrim(StrUpper(FileToCRC)) <> CRCTARGET then 
        BoxText(StrCat("Warning!  CRC mismatch",@CRLF,@CRLF,"FSI=%FOUNDSRCITEM%",@CRLF,"CRC=%CRCTARGET%")) 
        display(3,"delay","") 
EndIf 
FileClose(CRCHANDLE) 
;Send back CRCValue 
Return                ;ProcessCRC 


Article ID:   W16384
File Created: 2005:02:18:12:20:10
Last Updated: 2005:02:18:12:20:10