Compare commits

..

4 Commits

6 changed files with 54 additions and 12 deletions

Binary file not shown.

16
API.md
View File

@ -123,9 +123,9 @@ a remote socket to send you data.
##### Returns
* 0 on timeout
* -1,-2 on error
* 1 on success
* 0 on timeout.
* -1 on error. Use `Socket Errno` for more detail.
* 1 on success.
#### RESULT=Socket Async Wait Writing(Socket, Wait_ms)
@ -135,9 +135,13 @@ has been completed.
##### Returns
* 0 on timeout
* -1,-2 on error
* 1 on success
* 0 on timeout.
* -1 on error. Use `Socket Errno` for more detail.
* -3 on the socket having an error.
* If you're using this function to test for a successful connection and
receive a -3, close and reopen the socket, otherwise subsequent
checks will return 1.
* 1 on success.
#### RESULT=Socket Set Timeout(Socket, Wait_ms)

View File

@ -50,6 +50,10 @@ Reserve As Work 30,1024
For I=1 To 100
If ALREADY_CONNECTED=-1
RESULT=Socket Wait Async Writing(SOCKET,100)
If RESULT=-3
Print "Socket connect failure!"
Exit
End If
If RESULT>0
ALREADY_CONNECTED=0
@ -139,6 +143,11 @@ Doing something cool with the extension?
most system-friendly way of doing this.
* MiamiDX can be fiddly, at least it is on my MiSTer set up.
If Internet connectivity is not working, try re-connecting to the network.
* If using Roadshow, `bsdsocket.library` will always be available, so
you can't use its presence or lack thereof to test if Internet is available.
You'll have to use a combination of DNS lookups and/or connection
timeouts using `Socket Async Wait Writing` to determine if the Internet
is available.
## Versioning
@ -167,6 +176,11 @@ to contact me.
* First public release
### 1.0.1 (2023-04-04)
* Fix bug in Socket Wait Async Writing where result of getsockopt was
incorrectly used.
## Development
### Environment

Binary file not shown.

View File

@ -52,6 +52,10 @@ For I=1 To 100
If RESULT>0
ALREADY_CONNECTED=0
End If
If RESULT=-3
Print "Unrecoverable error!"
Exit
End If
End If
If ALREADY_CONNECTED=0

View File

@ -7,7 +7,7 @@
; extension number 18
ExtNb equ 18-1
Version MACRO
dc.b "1.0.0-20230401"
dc.b "1.0.1-20230403"
ENDM
VerNumber equ $1
@ -1576,6 +1576,7 @@ _DoSocketLibraryClose_Skip:
;
; @return
; 1 on success
; -1 on error, check Socket Errno
; -2 on library not open
; -3 on not interesting yet
; 0 on timeout
@ -1627,8 +1628,13 @@ _SocketWaitAsyncWriting_LibraryOpen:
MOVE.L BSDSocketBase-MB(A4),A6
CALLLIB WaitSelect
TST.L D0 ; timeout, pass through
BPL _SocketWaitAsyncWriting_Done
; returns:
; * 0 on timeout
; * >0 on socket was seen
; * -1 on error
TST.L D0
BEQ _SocketWaitAsyncWriting_Timeout
BMI _SocketWaitAsyncWriting_Error
MOVE.L (SP)+,D0 ; D0 contains socket again
Dload A4
@ -1667,8 +1673,13 @@ _SocketWaitAsyncWriting_CheckSockopt:
MOVE.L (SP)+,A3
TST.L D0
BPL _SocketWaitAsyncWriting_Ready
BMI _SocketWaitAsyncWriting_Error
Dlea IoctlSockOptScratch,A0
MOVE.L (A0),D0
BEQ _SocketWaitAsyncWriting_Ready
; still not ready
MOVEM.L (SP)+,A3-A4
MOVE.L #-3,D3
@ -1682,11 +1693,20 @@ _SocketWaitAsyncWriting_Ready:
RestoreStackFunction
Ret_Int
_SocketWaitAsyncWriting_Done:
_SocketWaitAsyncWriting_Error:
MOVE.L (SP)+,D1
MOVEM.L (SP)+,A3-A4
MOVE.L D0,D3
MOVE.L #-1,D3
RestoreStackFunction
Ret_Int
_SocketWaitAsyncWriting_Timeout:
MOVE.L (SP)+,D1
MOVEM.L (SP)+,A3-A4
MOVEQ #0,D3
RestoreStackFunction
Ret_Int