--- a/Socket.st Wed Apr 08 19:02:35 2020 +0200
+++ b/Socket.st Tue Apr 14 11:36:26 2020 +0200
@@ -2619,17 +2619,17 @@
domainClass := self class socketAddressClassForDomain:domain.
domainClass isNil ifTrue:[
- ^ self error:'invalid (unsupported) domain'.
+ ^ self error:'invalid (unsupported) domain'.
].
aSocketAddress isSocketAddress ifTrue:[
- aSocketAddress class == domainClass ifFalse:[
- ^ self error:'addressBuffer class mismatch (domain)'.
- ].
- addr := aSocketAddress.
+ aSocketAddress class == domainClass ifFalse:[
+ ^ self error:'addressBuffer class mismatch (domain)'.
+ ].
+ addr := aSocketAddress.
] ifFalse:[
- aSocketAddress notNil ifTrue:[
- addr := domainClass new.
- ].
+ aSocketAddress notNil ifTrue:[
+ addr := domainClass new.
+ ].
].
%{
@@ -2637,98 +2637,103 @@
OBJ fp = __INST(handle);
if (fp != nil) {
- SOCKET sock;
- size_t objSize;
- union sockaddr_u sa;
- socklen_t alen = 0;
- INT n, offs;
- int _flags = __longIntVal(flags);
- char *extPtr;
- unsigned char *allocatedBuffer = NULL, *buffer = NULL;
-
- sock = SOCKET_FROM_FILE_OBJECT(fp);
-
- if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
- if (__isSmallInteger(nBytes)) {
- if (__intVal(nBytes) < objSize) {
- objSize = __intVal(nBytes);
- }
- }
+ SOCKET sock;
+ size_t objSize;
+ union sockaddr_u sa;
+ socklen_t alen = 0;
+ INT n, offs;
+ INT _flags = __unsignedLongIntVal(flags);
+ char *extPtr;
+ unsigned char *allocatedBuffer = NULL, *buffer = NULL;
+
+ sock = SOCKET_FROM_FILE_OBJECT(fp);
+
+ if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
+ if (__isSmallInteger(nBytes)) {
+ if (__intVal(nBytes) < objSize) {
+ objSize = __intVal(nBytes);
+ }
+ }
# ifdef DO_WRAP_CALLS
- if (extPtr) {
- buffer = extPtr + offs;
- } else {
- allocatedBuffer = buffer = (unsigned char *)malloc(objSize);
- }
-
- do {
- __threadErrno = 0;
- alen = sizeof(sa);
- n = (INT)STX_WSA_NOINT_CALL6("recvfrom", recvfrom, sock, buffer, objSize, _flags, (struct sockaddr *)&sa, &alen);
- } while ((n < 0) && (__threadErrno == EINTR));
- if (n < 0) {
- errno = __threadErrno;
- }
-
- if (allocatedBuffer) {
- if (n > 0) {
- memcpy((char *)__InstPtr(aDataBuffer) + offs, allocatedBuffer, n);
- }
- free(allocatedBuffer);
- }
+ if (extPtr) {
+ buffer = extPtr + offs;
+ } else {
+ allocatedBuffer = buffer = (unsigned char *)malloc(objSize);
+ }
+
+ do {
+ __threadErrno = 0;
+ alen = sizeof(sa);
+ n = (INT)STX_WSA_NOINT_CALL6("recvfrom", recvfrom, sock, buffer, objSize, _flags, (struct sockaddr *)&sa, &alen);
+ } while ((n < 0) && (__threadErrno == EINTR));
+
+ if (n == -1) {
+ error = __INST(lastErrorNumber) = __MKSMALLINT(__threadErrno);
+ }
+
+ if (allocatedBuffer) {
+ if (n > 0) {
+ memcpy((char *)__InstPtr(aDataBuffer) + offs, allocatedBuffer, n);
+ }
+ free(allocatedBuffer);
+ }
+ if (n == -1) {
+ goto bad;
+ }
+
# else
- __BEGIN_INTERRUPTABLE__
- do {
- alen = sizeof(sa);
- if (extPtr) {
- n = recvfrom(sock, extPtr + offs, objSize, _flags, (struct sockaddr *) &sa, &alen);
- } else {
- n = recvfrom(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, _flags, (struct sockaddr *) &sa, &alen);
- }
- } while ((n < 0) && (errno == EINTR));
- __END_INTERRUPTABLE__
+ __BEGIN_INTERRUPTABLE__
+ do {
+ alen = sizeof(sa);
+ if (extPtr) {
+ n = recvfrom(sock, extPtr + offs, objSize, _flags, (struct sockaddr *) &sa, &alen);
+ } else {
+ n = recvfrom(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, _flags, (struct sockaddr *) &sa, &alen);
+ }
+ } while ((n < 0) && (errno == EINTR));
+ __END_INTERRUPTABLE__
# endif
- if (n >= 0 && __isNonNilObject(addr)) {
- char *addrPtr;
- int nInstVars, nInstBytes, objSize;
- OBJ oClass = __qClass(addr);
-
- if (! __isBytes(addr))
- goto bad;
- nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
- nInstBytes = OHDR_SIZE + (nInstVars * sizeof(OBJ));
- objSize = __qSize(addr) - nInstBytes;
- addrPtr = (char *)__InstPtr(addr) + nInstBytes;
- if (objSize < alen)
- goto bad;
-
- /*
- * extract the datagrams address
- */
- memcpy(addrPtr, (char *)&sa, alen);
- addrLen = __MKSMALLINT(alen);
- }
- if (n < 0) {
- error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
- }
- nReceived = __MKSMALLINT(n);
+ if (n >= 0 && __isNonNilObject(addr)) {
+ char *addrPtr;
+ int nInstVars, nInstBytes, objSize;
+ OBJ oClass = __qClass(addr);
+
+ if (! __isBytes(addr))
+ goto bad;
+ nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
+ nInstBytes = OHDR_SIZE + (nInstVars * sizeof(OBJ));
+ objSize = __qSize(addr) - nInstBytes;
+ addrPtr = (char *)__InstPtr(addr) + nInstBytes;
+ if (objSize < alen)
+ goto bad;
+
+ /*
+ * extract the datagrams address
+ */
+ memcpy(addrPtr, (char *)&sa, alen);
+ addrLen = __MKSMALLINT(alen);
+ }
+ if (n < 0) {
+ error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
+ }
+ nReceived = __MKSMALLINT(n);
}
#endif
bad: ;
%}.
error notNil ifTrue:[
- ^ self readError:error.
+ ^ self readError:error.
].
nReceived notNil ifTrue:[
- (addrLen notNil and:[addr ~~ aSocketAddress]) ifTrue:[
- self obsoleteFeatureWarning:'please use a socketAddress argument'.
-
- "can be a ByteArray for backward compatibility"
- aSocketAddress replaceFrom:1 to:addrLen with:(addr hostAddress).
- ].
- ^ nReceived
+ (addrLen notNil and:[addr ~~ aSocketAddress]) ifTrue:[
+ self obsoleteFeatureWarning:'please use a socketAddress argument'.
+
+ "can be a ByteArray for backward compatibility"
+ aSocketAddress replaceFrom:1 to:addrLen with:(addr hostAddress).
+ ].
+ ^ nReceived
].
"
arrive here if you try to receive into an invalid buffer
@@ -2738,7 +2743,7 @@
"
self primitiveFailed
- "Modified: / 06-04-2020 / 22:33:10 / stefan"
+ "Modified: / 08-04-2020 / 20:50:46 / stefan"
!
sendBuffer:aDataBuffer start:startIndex for:nBytes flags:flags
@@ -4707,3 +4712,4 @@
version_CVS
^ '$Header$'
! !
+