Lines 1-5
Link Here
|
1 |
;; -*- Mode: Lisp; Syntax: Common-Lisp -*- |
1 |
;; -*- Mode: Lisp; Syntax: Common-Lisp -*- |
2 |
;; $Id$ |
2 |
;; $Id: sockets.lisp,v 1.17 2005/12/05 09:21:30 goffioul Exp $ |
3 |
|
3 |
|
4 |
;; This file is based on SBCL's SB-BSD-SOCKET module and has been |
4 |
;; This file is based on SBCL's SB-BSD-SOCKET module and has been |
5 |
;; heavily modified to work with ECL by Julian Stecklina. |
5 |
;; heavily modified to work with ECL by Julian Stecklina. |
Lines 518-524
Link Here
|
518 |
"{ |
518 |
"{ |
519 |
struct sockaddr_in sockaddr; |
519 |
struct sockaddr_in sockaddr; |
520 |
int addr_len = sizeof(struct sockaddr_in); |
520 |
int addr_len = sizeof(struct sockaddr_in); |
521 |
int new_fd = accept(#0, (struct sockaddr*)&sockaddr, &addr_len); |
521 |
int new_fd = accept(#0, (struct sockaddr*)&sockaddr, (socklen_t *) &addr_len); |
522 |
|
522 |
|
523 |
@(return 0) = new_fd; |
523 |
@(return 0) = new_fd; |
524 |
@(return 1) = Cnil; |
524 |
@(return 1) = Cnil; |
Lines 651-660
Link Here
|
651 |
sockaddr.sun_len = sizeof(struct sockaddr_un); |
651 |
sockaddr.sun_len = sizeof(struct sockaddr_un); |
652 |
#endif |
652 |
#endif |
653 |
sockaddr.sun_family = #2; |
653 |
sockaddr.sun_family = #2; |
654 |
strncpy(&sockaddr.sun_path,#1,sizeof(sockaddr.sun_path)); |
654 |
strncpy((char *) &sockaddr.sun_path,#1,sizeof(sockaddr.sun_path)); |
655 |
sockaddr.sun_path[sizeof(sockaddr.sun_path)-1] = '\0'; |
655 |
sockaddr.sun_path[sizeof(sockaddr.sun_path)-1] = '\0'; |
656 |
|
656 |
|
657 |
@(return) = bind(#0,&sockaddr, sizeof(struct sockaddr_un)); |
657 |
@(return) = bind(#0,(struct sockaddr *) &sockaddr, sizeof(struct sockaddr_un)); |
658 |
}")) |
658 |
}")) |
659 |
(socket-error "bind")))) |
659 |
(socket-error "bind")))) |
660 |
|
660 |
|
Lines 664-672
Link Here
|
664 |
"{ |
664 |
"{ |
665 |
struct sockaddr_un sockaddr; |
665 |
struct sockaddr_un sockaddr; |
666 |
int addr_len = sizeof(struct sockaddr_un); |
666 |
int addr_len = sizeof(struct sockaddr_un); |
667 |
int new_fd = accept(#0, &sockaddr, &addr_len); |
667 |
int new_fd = accept(#0, (struct sockaddr *) &sockaddr, (socklen_t *) &addr_len); |
668 |
@(return 0) = new_fd; |
668 |
@(return 0) = new_fd; |
669 |
@(return 1) = (new_fd == -1) ? Cnil : make_string_copy(&sockaddr.sun_path); |
669 |
@(return 1) = (new_fd == -1) ? Cnil : make_string_copy((char *) &sockaddr.sun_path); |
670 |
}") |
670 |
}") |
671 |
(cond |
671 |
(cond |
672 |
((= fd -1) |
672 |
((= fd -1) |
Lines 694-703
Link Here
|
694 |
sockaddr.sun_len = sizeof(struct sockaddr_un); |
694 |
sockaddr.sun_len = sizeof(struct sockaddr_un); |
695 |
#endif |
695 |
#endif |
696 |
sockaddr.sun_family = #1; |
696 |
sockaddr.sun_family = #1; |
697 |
strncpy(&sockaddr.sun_path,#2,sizeof(sockaddr.sun_path)); |
697 |
strncpy((char *) &sockaddr.sun_path,#2,sizeof(sockaddr.sun_path)); |
698 |
sockaddr.sun_path[sizeof(sockaddr.sun_path)-1] = '\0'; |
698 |
sockaddr.sun_path[sizeof(sockaddr.sun_path)-1] = '\0'; |
699 |
|
699 |
|
700 |
@(return) = connect(#0,&sockaddr, sizeof(struct sockaddr_un)); |
700 |
@(return) = connect(#0,(struct sockaddr *) &sockaddr, sizeof(struct sockaddr_un)); |
701 |
}")) |
701 |
}")) |
702 |
(socket-error "connect")))) |
702 |
(socket-error "connect")))) |
703 |
|
703 |
|
Lines 708-717
Link Here
|
708 |
{ |
708 |
{ |
709 |
struct sockaddr_un name; |
709 |
struct sockaddr_un name; |
710 |
socklen_t len = sizeof(struct sockaddr_un); |
710 |
socklen_t len = sizeof(struct sockaddr_un); |
711 |
int ret = getpeername(#0,&name,&len); |
711 |
int ret = getpeername(#0,(struct sockaddr *) &name,&len); |
712 |
|
712 |
|
713 |
if (ret == 0) { |
713 |
if (ret == 0) { |
714 |
@(return) = make_string_copy(&name.sun_path); |
714 |
@(return) = make_string_copy((char *) &name.sun_path); |
715 |
} else { |
715 |
} else { |
716 |
@(return) = Cnil; |
716 |
@(return) = Cnil; |
717 |
} |
717 |
} |
Lines 985-991
Link Here
|
985 |
)) |
985 |
)) |
986 |
(t :int :int) |
986 |
(t :int :int) |
987 |
t |
987 |
t |
988 |
"ecl_make_stream_from_fd(#0,#1,#2)" |
988 |
"ecl_make_stream_from_fd(#0,#1,(enum ecl_smmode) #2)" |
989 |
:one-liner t)) |
989 |
:one-liner t)) |
990 |
|
990 |
|
991 |
(defgeneric socket-make-stream (socket &rest args) |
991 |
(defgeneric socket-make-stream (socket &rest args) |
Lines 1017-1023
Link Here
|
1017 |
cl_object in_strm, out_strm; |
1017 |
cl_object in_strm, out_strm; |
1018 |
in_strm = ecl_make_stream_from_fd(make_simple_string(\"FD-STREAM\"), #0, smm_input); |
1018 |
in_strm = ecl_make_stream_from_fd(make_simple_string(\"FD-STREAM\"), #0, smm_input); |
1019 |
out_strm = ecl_make_stream_from_fd(make_simple_string(\"FD-STREAM\"), #0, smm_output); |
1019 |
out_strm = ecl_make_stream_from_fd(make_simple_string(\"FD-STREAM\"), #0, smm_output); |
1020 |
@(return) = make_two_way_stream(in_strm, out_strm); |
1020 |
@(return) = cl_make_two_way_stream(in_strm, out_strm); |
1021 |
}" |
1021 |
}" |
1022 |
:one-liner nil))) |
1022 |
:one-liner nil))) |
1023 |
(setf (slot-value socket 'stream) stream) |
1023 |
(setf (slot-value socket 'stream) stream) |