--- a/Socket.st Wed Jan 24 17:02:38 2007 +0100
+++ b/Socket.st Mon Feb 05 14:04:56 2007 +0100
@@ -42,29 +42,10 @@
# define SOCKET_FROM_FD(fd) (fd)
-#if 0
-# undef INT
-# undef Array
-# undef Number
-# undef Method
-# undef Point
-# undef Rectangle
-# undef Block
-# undef Context
-# undef String
-# undef Message
-# undef Object
-# undef Date
-# undef Time
-# undef Set
-# undef Signal
-# undef Delay
-#endif
-
#endif /* WIN32 */
-# define SOCKET_FROM_FILE(f) (SOCKET_FROM_FD(fileno(f)))
-# define SOCKET_FROM_FILE_OBJECT(f) (SOCKET_FROM_FILE(__FILEVal(f)))
+#define SOCKET_FROM_FILE(f) (SOCKET_FROM_FD(fileno(f)))
+#define SOCKET_FROM_FILE_OBJECT(f) (SOCKET_FROM_FILE(__FILEVal(f)))
#ifndef WIN32
# define closesocket(sock) close(sock)
@@ -177,13 +158,19 @@
typedef int BOOL;
#endif
+#ifdef WIN32
+# undef stdout
+# undef stderr
+# define stdout __win32_stdout()
+# define stderr __win32_stderr()
+#endif
%}
! !
!Socket primitiveVariables!
%{
-static int __debugging__ = 0;
+static int __debugging__ = 1;
%}
! !
@@ -2335,10 +2322,12 @@
if (t != nil) {
FILE *fp;
SOCKET sock;
+ int fd;
__INST(filePointer) = nil;
fp = __FILEVal(t);
- sock = SOCKET_FROM_FILE(fp);
+ fd = fileno(fp);
+ sock = SOCKET_FROM_FD(fd);
# ifdef xxDO_WRAP_CALLS
{ int ret;
@@ -2358,22 +2347,30 @@
}
# else /* !DO_WRAP_CALLS */
- DBGFPRINTF((stderr, "SOCKET: fflush %x (%d)\n", fp, fileno(fp)));
+ DBGFPRINTF((stderr, "SOCKET: fflush %x (%d %d)\n", fp, fileno(fp), sock));
fflush(fp);
- /* shutdown(fileno(fp), 2); */
-# ifdef xxWIN32
- closesocket(sock);
-# endif
- DBGFPRINTF((stderr, "SOCKET: fclose %x (%d)\n", fp, sock));
- if (@global(FileOpenTrace) == true) {
- console_fprintf(stderr, "fclose [Socket] %x\n", fp);
- }
- fclose(fp);
-# ifdef WIN32
+
+# if defined(WIN32) && defined(CLOSESOCKET_BEFORE_FCLOSE)
DBGFPRINTF((stderr, "SOCKET: closesocket (%d)\n", sock));
closesocket(sock);
# endif
-
+ if ((@global(FileOpenTrace) == true) || __debugging__) {
+ console_fprintf(stderr, "SOCKET: fclose %x (%d %d)\n", fp, fileno(fp), sock);
+ }
+ fclose(fp);
+
+ /*
+ * mhmh - seems that the stdio is fixed to know how to close a socket.
+ * (hope that is true...)
+ */
+# ifdef PRE_24_JAN_2007
+# define CLOSESOCKET_AFTER_FCLOSE
+# endif
+
+# if defined(WIN32) && defined(CLOSESOCKET_AFTER_FCLOSE)
+ DBGFPRINTF((stderr, "SOCKET: closesocket (%d)\n", sock));
+ closesocket(sock);
+# endif
# endif /* !DO_WRAP_CALLS */
}
#endif /* NO_SOCKET */
@@ -2926,9 +2923,9 @@
*/
# ifdef WIN32
{
- HANDLE h;
int _fd = _open_osfhandle(newSock, 0);
fp = fdopen(_fd, "r+");
+ DBGPRINTF(("SOCKET: sock=%d fd=%d fp=%x\n",newSock,_fd, fp));
}
# else
fp = fdopen(newSock, "r+");
@@ -2952,7 +2949,7 @@
RETURN (false);
}
- if (@global(FileOpenTrace) == true) {
+ if ((@global(FileOpenTrace) == true) || __debugging__) {
# ifdef WIN32
{
HANDLE h;
@@ -3702,7 +3699,7 @@
__END_INTERRUPTABLE__
# endif
} else {
- if (@global(FileOpenTrace) == true) {
+ if ((@global(FileOpenTrace) == true) || __debugging__) {
console_fprintf(stderr, "fdopen [Socket] -> %x\n", fp);
}
@@ -4078,5 +4075,5 @@
!Socket class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic2/Socket.st,v 1.228 2007-01-24 16:02:38 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/Socket.st,v 1.229 2007-02-05 13:04:56 cg Exp $'
! !