Changeset 10574
- Timestamp:
- 08/27/08 05:49:04 (3 months ago)
- Files:
-
- trunk/source/level-1/l1-sockets.lisp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/source/level-1/l1-sockets.lisp
r10544 r10574 48 48 SOCKET-ERROR-IDENTIFIER 49 49 SOCKET-ERROR-SITUATION 50 WITH-OPEN-SOCKET))) 50 WITH-OPEN-SOCKET)) 51 #+windows-target 52 (defmacro check-winsock-error (form) 53 (let* ((val (gensym))) 54 `(let* ((,val ,form)) 55 (if (< ,val 0) 56 (%get-winsock-error) 57 ,val)))) 58 (defmacro check-socket-error (form) 59 #+windows-target `(check-winsock-error ,form) 60 #-windows-target `(int-errno-call ,form)) 61 ) 62 63 (declaim (inline socket-handle)) 64 (defun socket-handle (fd) 65 #+windows-target (#__get_osfhandle fd) 66 #-windows-target fd) 67 68 #+windows-target 69 (defun %get-winsock-error () 70 (- (#_WSAGetLastError))) 51 71 52 72 ;;; The PPC is big-endian (uses network byte order), which makes … … 1195 1215 1196 1216 (defun c_socket_1 (domain type protocol) 1197 (int-errno-call (#_socket domain type protocol))) 1217 #-windows-target (int-errno-call (#_socket domain type protocol)) 1218 #+windows-target (let* ((handle (#_socket domain type protocol))) 1219 (if (< handle 0) 1220 (%get-winsock-error) 1221 (let* ((fd (#__open_osfhandle handle 0))) 1222 (if (< fd 0) 1223 (progn 1224 (#_CloseHandle handle) 1225 (%get-errno)) 1226 fd))))) 1227 1228 1198 1229 1199 1230 (defun c_socket (domain type protocol) … … 1241 1272 1242 1273 (defun c_bind (sockfd sockaddr addrlen) 1243 ( int-errno-call (#_bind sockfdsockaddr addrlen)))1274 (check-socket-error (#_bind (socket-handle sockfd) sockaddr addrlen))) 1244 1275 1245 1276 … … 1253 1284 (progn 1254 1285 (fd-set-flags sockfd (logior flags #$O_NONBLOCK)) 1255 (let* ((err ( int-errno-call (#_connect sockfdaddr len))))1286 (let* ((err (check-socket-error (#_connect (socket-handle sockfd) addr len)))) 1256 1287 (cond ((or (eql err (- #$EINPROGRESS)) (eql err (- #$EINTR))) 1257 1288 (if (process-output-wait sockfd timeout-in-milliseconds) … … 1262 1293 1263 1294 (defun c_listen (sockfd backlog) 1264 ( int-errno-call (#_listen sockfdbacklog)))1295 (check-socket-error (#_listen (socket-handle sockfd) backlog))) 1265 1296 1266 1297 (defun c_accept (sockfd addrp addrlenp) 1267 1298 (ignoring-eintr 1268 ( int-errno-call (#_accept sockfdaddrp addrlenp))))1299 (check-socket-error (#_accept (socket-handle sockfd) addrp addrlenp)))) 1269 1300 1270 1301 (defun c_getsockname (sockfd addrp addrlenp) 1271 ( int-errno-call (#_getsockname sockfdaddrp addrlenp)))1302 (check-socket-error (#_getsockname (socket-handle sockfd) addrp addrlenp))) 1272 1303 1273 1304 (defun c_getpeername (sockfd addrp addrlenp) 1274 ( int-errno-call (#_getpeername sockfdaddrp addrlenp)))1305 (check-socket-error (#_getpeername (socket-handle sockfd) addrp addrlenp))) 1275 1306 1276 1307 (defun c_socketpair (domain type protocol socketsptr) 1277 ( int-errno-call(#_socketpair domain type protocol socketsptr)))1308 (check-socket-error (#_socketpair domain type protocol socketsptr))) 1278 1309 1279 1310 1280 1311 (defun c_sendto (sockfd msgptr len flags addrp addrlen) 1281 ( int-errno-call (#_sendto sockfdmsgptr len flags addrp addrlen)))1312 (check-socket-error (#_sendto (socket-handle sockfd) msgptr len flags addrp addrlen))) 1282 1313 1283 1314 (defun c_recvfrom (sockfd bufptr len flags addrp addrlenp) 1284 ( int-errno-call (#_recvfrom sockfdbufptr len flags addrp addrlenp)))1315 (check-socket-error (#_recvfrom (socket-handle sockfd) bufptr len flags addrp addrlenp))) 1285 1316 1286 1317 (defun c_shutdown (sockfd how) 1287 ( int-errno-call (#_shutdown sockfdhow)))1318 (check-socket-error (#_shutdown (socket-handle sockfd) how))) 1288 1319 1289 1320 (defun c_setsockopt (sockfd level optname optvalp optlen) 1290 ( int-errno-call (#_setsockopt sockfdlevel optname optvalp optlen)))1321 (check-socket-error (#_setsockopt (socket-handle sockfd) level optname optvalp optlen))) 1291 1322 1292 1323 (defun c_getsockopt (sockfd level optname optvalp optlenp) 1293 ( int-errno-call (#_getsockopt sockfdlevel optname optvalp optlenp)))1324 (check-socket-error (#_getsockopt (socket-handle sockfd) level optname optvalp optlenp))) 1294 1325 1295 1326 (defun c_sendmsg (sockfd msghdrp flags) 1296 ( int-errno-call (#_sendmsg sockfdmsghdrp flags)))1327 (check-socket-error (#_sendmsg (socket-handle sockfd) msghdrp flags))) 1297 1328 1298 1329 (defun c_recvmsg (sockfd msghdrp flags) 1299 ( int-errno-call (#_recvmsg sockfdmsghdrp flags)))1330 (check-socket-error (#_recvmsg (socket-handle sockfd) msghdrp flags))) 1300 1331 1301 1332 ;;; Return a list of currently configured interfaces, a la ifconfig.
