diff options
author | Nils Durner <durner@gnunet.org> | 2010-11-22 20:15:29 +0000 |
---|---|---|
committer | Nils Durner <durner@gnunet.org> | 2010-11-22 20:15:29 +0000 |
commit | 4775f33e1c0b976d79bfe4918cafea88b5376592 (patch) | |
tree | ce6be73e197bbfdd2d7c622c93b0dd671d88e296 /src/util/network.c | |
parent | 1858f0b734b9c855a3852ae0a0d191329ca30df4 (diff) | |
download | gnunet-4775f33e1c0b976d79bfe4918cafea88b5376592.tar.gz gnunet-4775f33e1c0b976d79bfe4918cafea88b5376592.zip |
named pipes
Diffstat (limited to 'src/util/network.c')
-rw-r--r-- | src/util/network.c | 56 |
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); |