aboutsummaryrefslogtreecommitdiff
path: root/src/util/network.c
diff options
context:
space:
mode:
authorNils Durner <durner@gnunet.org>2010-11-22 20:15:29 +0000
committerNils Durner <durner@gnunet.org>2010-11-22 20:15:29 +0000
commit4775f33e1c0b976d79bfe4918cafea88b5376592 (patch)
treece6be73e197bbfdd2d7c622c93b0dd671d88e296 /src/util/network.c
parent1858f0b734b9c855a3852ae0a0d191329ca30df4 (diff)
downloadgnunet-4775f33e1c0b976d79bfe4918cafea88b5376592.tar.gz
gnunet-4775f33e1c0b976d79bfe4918cafea88b5376592.zip
named pipes
Diffstat (limited to 'src/util/network.c')
-rw-r--r--src/util/network.c56
1 files changed, 35 insertions, 21 deletions
diff --git a/src/util/network.c b/src/util/network.c
index 58d67ed19..452f28706 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -1137,28 +1137,38 @@ GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds,
1137 GNUNET_CONTAINER_slist_next (i)) 1137 GNUNET_CONTAINER_slist_next (i))
1138 1138
1139 { 1139 {
1140 HANDLE h; 1140 struct GNUNET_DISK_FileHandle *fh;
1141 DWORD dwBytes; 1141 DWORD dwBytes;
1142 h = *(HANDLE *) GNUNET_CONTAINER_slist_get (i, NULL); 1142 fh = (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (i, NULL);
1143 if (!PeekNamedPipe (h, NULL, 0, NULL, &dwBytes, NULL)) 1143 if (fh->type == GNUNET_PIPE)
1144 { 1144 {
1145 retcode = -1; 1145 if (!PeekNamedPipe (fh->h, NULL, 0, NULL, &dwBytes, NULL))
1146 SetErrnoFromWinError (GetLastError ()); 1146 {
1147 retcode = -1;
1148 SetErrnoFromWinError (GetLastError ());
1147 1149
1148#if DEBUG_NETWORK 1150 #if DEBUG_NETWORK
1149 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, 1151 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
1150 "PeekNamedPipe"); 1152 "PeekNamedPipe");
1151 1153
1152#endif 1154 #endif
1153 goto select_loop_end; 1155 goto select_loop_end;
1154 } 1156 }
1155 else if (dwBytes) 1157 else if (dwBytes)
1156 1158
1159 {
1160 GNUNET_CONTAINER_slist_add (handles_read,
1161 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
1162 fh, sizeof (struct GNUNET_DISK_FileHandle));
1163 retcode++;
1164 }
1165 }
1166 else
1157 { 1167 {
1168 /* Should we wait for more bytes to read here (in case of previous EOF)? */
1158 GNUNET_CONTAINER_slist_add (handles_read, 1169 GNUNET_CONTAINER_slist_add (handles_read,
1159 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, 1170 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
1160 &h, sizeof (HANDLE)); 1171 fh, sizeof (struct GNUNET_DISK_FileHandle));
1161 retcode++;
1162 } 1172 }
1163 } 1173 }
1164 GNUNET_CONTAINER_slist_iter_destroy (i); 1174 GNUNET_CONTAINER_slist_iter_destroy (i);
@@ -1174,16 +1184,20 @@ GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds,
1174 GNUNET_CONTAINER_slist_next (i)) 1184 GNUNET_CONTAINER_slist_next (i))
1175 1185
1176 { 1186 {
1177 HANDLE h; 1187 struct GNUNET_DISK_FileHandle *fh;
1178 DWORD dwBytes; 1188 DWORD dwBytes;
1179 h = *(HANDLE *) GNUNET_CONTAINER_slist_get (i, NULL);
1180 if (!PeekNamedPipe (h, NULL, 0, NULL, &dwBytes, NULL))
1181 1189
1190 fh = (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (i, NULL);
1191 if (fh->type == GNUNET_PIPE)
1182 { 1192 {
1183 GNUNET_CONTAINER_slist_add (handles_except, 1193 if (!PeekNamedPipe (fh->h, NULL, 0, NULL, &dwBytes, NULL))
1184 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, 1194
1185 &h, sizeof (HANDLE)); 1195 {
1186 retcode++; 1196 GNUNET_CONTAINER_slist_add (handles_except,
1197 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
1198 fh, sizeof (struct GNUNET_DISK_FileHandle));
1199 retcode++;
1200 }
1187 } 1201 }
1188 } 1202 }
1189 GNUNET_CONTAINER_slist_iter_destroy (i); 1203 GNUNET_CONTAINER_slist_iter_destroy (i);