Changeset 484 for branches/win/trunk/src/ocat_wintuntap.c
- Timestamp:
- 02/28/09 23:49:41 (3 years ago)
- File:
-
- 1 edited
-
branches/win/trunk/src/ocat_wintuntap.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/win/trunk/src/ocat_wintuntap.c
r483 r484 135 135 int win_open_tun(char *dev, int s) 136 136 { 137 char deviceId[ 256], deviceName[256], tapPath[256];137 char deviceId[SIZE_256], deviceName[SIZE_256], tapPath[SIZE_256]; 138 138 TapData_t *tapData = &tapData_; 139 139 unsigned long len = 0; … … 183 183 // % netsh interface ipv6 add route fd87:d87e:eb43::/48 "LAN-Verbindung 2" 184 184 185 strlcpy(dev, device Id, s);185 strlcpy(dev, deviceName, s); 186 186 return 0; 187 187 } … … 202 202 int win_write_tun(const char *jb, int len) 203 203 { 204 TapData_t *tapData = &tapData_; 205 DWORD written, err; 206 BOOL result; 207 208 result = GetOverlappedResult(tapData->fd, &tapData->write_overlapped, 209 &written, FALSE); 210 211 if (!result && GetLastError() == ERROR_IO_INCOMPLETE) 212 WaitForSingleObject(tapData->write_event, INFINITE); 213 214 if (!WriteFile(tapData->fd, jb, len, &written, &tapData->write_overlapped)) 215 { 204 TapData_t *tapData = &tapData_; 205 DWORD written, err; 206 207 log_debug("WriteFile %d bytes", len); 208 if (!GetOverlappedResult(tapData->fd, &tapData->write_overlapped, &written, FALSE)) 209 { 210 err = GetLastError(); 211 log_debug("GetOverlappedResult failed. Error = %ld", err); 212 if (err == ERROR_IO_INCOMPLETE) 213 { 214 log_debug("IO_COMPLETE, WaitForSingleObject"); 215 if ((err = WaitForSingleObject(tapData->write_event, INFINITE)) == WAIT_FAILED) 216 log_msg(LOG_ERR, "WaitForSingleObject failed. Error = %ld", GetLastError()); 217 else 218 log_debug("WaitForSingleObject returen %08lx", err); 219 } 220 } 221 222 if (!WriteFile(tapData->fd, jb, len, &written, &tapData->write_overlapped)) 223 { 216 224 if ((err = GetLastError()) != ERROR_IO_PENDING) 217 225 { 218 fprintf(stderr, "error writing %ld \n", err);219 return -1;226 log_msg(LOG_ERR, "error writing %ld", err); 227 return -1; 220 228 } 221 229 else 222 fprintf(stderr, "io pending\n"); 223 } 224 225 return written; 226 230 log_debug("IO_PENDING"); 231 } 232 233 return written; 227 234 } 228 235 … … 234 241 DWORD len, err; 235 242 236 log_debug("ReadFile ");243 log_debug("ReadFile max. %d bytes", n); 237 244 if (!ReadFile(tapData->fd, buf, n, &len, &tapData->read_overlapped)) 238 245 { … … 240 247 if ((err = GetLastError()) == ERROR_IO_PENDING) 241 248 { 242 log_debug("ReadFile pending..."); 243 244 if ((err = WaitForSingleObject(tapData->read_event, INFINITE)) == WAIT_FAILED) 245 log_msg(LOG_ERR, "WaitForSingleObject failed. Error = %ld", GetLastError()); 246 else 247 log_debug("WaitForSingleObject returen %08lx", err); 249 for (err = WAIT_TIMEOUT; err == WAIT_TIMEOUT;) 250 { 251 log_debug("ReadFile pending..."); 252 if ((err = WaitForSingleObject(tapData->read_event, SELECT_TIMEOUT * 1000)) == WAIT_FAILED) 253 log_msg(LOG_ERR, "WaitForSingleObject failed. Error = %ld", GetLastError()); 254 log_debug("WaitForSingleObject returned %08lx", err); 255 } 248 256 249 257 if (!GetOverlappedResult(tapData->fd, &tapData->read_overlapped, &len, FALSE))
Note: See TracChangeset
for help on using the changeset viewer.
