13 #include <sys/socket.h>
19 static Lock _sock_lock;
20 static Rock *_sock_rock;
23 _sock_findrock(int fd, struct stat *dp)
33 for(r = _sock_rock; r; r = r->next){
34 if(r->inode == dp->st_ino
35 && r->dev == dp->st_dev)
51 for(r = _sock_rock; r; r = r->next){
52 if(r->inode == d.st_ino
53 && r->dev == d.st_dev)
57 r = malloc(sizeof(Rock));
68 memset(&r->raddr, 0, sizeof(r->raddr));
69 memset(&r->addr, 0, sizeof(r->addr));
76 _sock_data(int cfd, char *net, int domain, int stype, int protocol, Rock **rp)
82 /* get the data file name */
83 n = read(cfd, name, sizeof(name)-1);
90 n = strtoul(name, 0, 0);
91 snprintf(name, sizeof name, "/net/%s/%d/data", net, n);
94 fd = open(name, O_RDWR);
101 /* hide stuff under the rock */
102 snprintf(name, sizeof name, "/net/%s/%d/ctl", net, n);
103 r = _sock_newrock(fd);
111 r->protocol = protocol;
112 strcpy(r->ctl, name);
119 socket(int domain, int stype, int protocol)
129 /* get a free network directory */
133 cfd = open("/net/udp/clone", O_RDWR);
137 cfd = open("/net/tcp/clone", O_RDWR);
141 cfd = open("/net/il/clone", O_RDWR);
144 errno = EPROTONOSUPPORT;
149 return _sock_data(cfd, net, domain, stype, protocol, 0);
153 r = _sock_newrock(pfd[0]);
162 r->protocol = protocol;
166 errno = EPROTONOSUPPORT;
176 r = _sock_findrock(fd, 0);
181 * probably should do better than this
183 int getsockopt(int, int, int, void *, int *)
188 int setsockopt(int, int, int, void *, int)