- "Perform the accept(2) call, returning a newly-created connected socket
-and the peer address as multiple values"
- (let* ((sockaddr (make-sockaddr-for socket))
- (fd (sb-sys:without-gcing
- (sockint::accept (socket-file-descriptor socket)
- (sockint::array-data-address sockaddr)
- (size-of-sockaddr socket)))))
- (apply #'values
- (if (= fd -1)
- (socket-error "accept")
- (let ((s (make-instance (class-of socket)
- :type (socket-type socket)
- :protocol (socket-protocol socket)
- :descriptor fd)))
- (sb-ext:finalize s (lambda () (sockint::close fd)))))
- (multiple-value-list (bits-of-sockaddr socket sockaddr)))))
-
-(defgeneric socket-connect (socket &rest address))
+ (let ((sockaddr (make-sockaddr-for socket)))
+ (sb-sys:with-pinned-objects (sockaddr)
+ (let ((fd (sockint::accept (socket-file-descriptor socket)
+ (sockint::array-data-address sockaddr)
+ (size-of-sockaddr socket))))
+ (apply #'values
+ (if (= fd -1)
+ (socket-error "accept")
+ (let ((s (make-instance (class-of socket)
+ :type (socket-type socket)
+ :protocol (socket-protocol socket)
+ :descriptor fd)))
+ (sb-ext:finalize s (lambda () (sockint::close fd)))))
+ (multiple-value-list (bits-of-sockaddr socket sockaddr)))))))
+
+(defgeneric socket-connect (socket &rest address)
+ (:documentation "Perform the connect(2) call to connect SOCKET to a
+ remote PEER. No useful return value."))
+