| ︙ | | |
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
|
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
|
-
+
|
int oldMode = Tcl_SetServiceMode(TCL_SERVICE_NONE);
/*
* Loop in the blocking case until the connect signal is present
*/
while (1) {
while (true) {
/*
* Get the statePtr lock.
*/
ThreadSpecificData *tsdPtr = (ThreadSpecificData *)
TclThreadDataKeyGet(&dataKey);
WaitForSingleObject(tsdPtr->socketListLock, INFINITE);
|
| ︙ | | |
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
|
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
|
-
+
|
* that we clear the FD_READ bit because read events are level triggered
* so a new event will be generated if there is still data available to be
* read. We have to simulate blocking behavior here since we are always
* using non-blocking sockets.
*/
int bytesRead;
while (1) {
while (true) {
SendSelectMessage(tsdPtr, UNSELECT, statePtr);
/*
* Single fd operation: this proc is only called for a connected
* socket.
*/
|
| ︙ | | |
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
|
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
|
-
+
|
*/
if (WaitForConnect(statePtr, errorCodePtr) != 0) {
return -1;
}
int written;
while (1) {
while (true) {
SendSelectMessage(tsdPtr, UNSELECT, statePtr);
/*
* Single fd operation: this proc is only called for a connected
* socket.
*/
|
| ︙ | | |
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
|
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
|
-
-
+
+
|
TclInitSockets();
/*
* Do the name lookups for the local and remote addresses.
*/
if (!TclCreateSocketAddress(interp, &addrlist, host, port, 0, &errorMsg)
|| !TclCreateSocketAddress(interp, &myaddrlist, myaddr, myport, 1,
if (!TclCreateSocketAddress(interp, &addrlist, host, port, false, &errorMsg)
|| !TclCreateSocketAddress(interp, &myaddrlist, myaddr, myport, true,
&errorMsg)) {
if (addrlist != NULL) {
freeaddrinfo(addrlist);
}
if (interp != NULL) {
TclPrintfResult(interp, "couldn't open socket: %s", errorMsg);
}
|
| ︙ | | |
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
|
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
|
-
+
|
*/
if (TclSockGetPort(interp, service, "tcp", &port) != TCL_OK) {
errorMsg = "invalid port number";
goto error;
}
if (!TclCreateSocketAddress(interp, &addrlist, myHost, port, 1,
if (!TclCreateSocketAddress(interp, &addrlist, myHost, port, true,
&errorMsg)) {
goto error;
}
for (struct addrinfo *addrPtr = addrlist; addrPtr != NULL;
addrPtr = addrPtr->ai_next) {
sock = socket(addrPtr->ai_family, addrPtr->ai_socktype,
|
| ︙ | | |
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
|
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
|
-
+
|
/*
* Reset WSAAsyncSelect so we have a fresh set of events pending.
*/
SendSelectMessage(tsdPtr, UNSELECT, statePtr);
SendSelectMessage(tsdPtr, SELECT, statePtr);
while (1) {
while (true) {
int event_found;
/*
* Get statePtr lock.
*/
WaitForSingleObject(tsdPtr->socketListLock, INFINITE);
|
| ︙ | | |