secondly, sendmsg seems fussy about 0 length name or controllen;
third, minor tweaks for gcc (#s instead of "s", and pointer casts).
SCCS-vsn: sys/tests/netccitt/xi_sink.c 7.6
#endif /* not lint */
#ifndef lint
#endif /* not lint */
#ifndef lint
-static char sccsid[] = "@(#)xi_sink.c 7.5 (Berkeley) %G%";
+static char sccsid[] = "@(#)xi_sink.c 7.6 (Berkeley) %G%";
#define dbprintf if(verbose)printf
#define dbprintf if(verbose)printf
+#ifdef __STDC__
+#define try(a,b,c) {x = (a b); dbprintf("%s%s returns %d\n",c,#a,x);\
+ if(x<0) {perror(#a); myexit(0);}}
+#else
#define try(a,b,c) {x = (a b); dbprintf("%s%s returns %d\n",c,"a",x);\
if(x<0) {perror("a"); myexit(0);}}
#define try(a,b,c) {x = (a b); dbprintf("%s%s returns %d\n",c,"a",x);\
if(x<0) {perror("a"); myexit(0);}}
}
#define BIG 2048
#define MIDLIN 512
char readbuf[BIG];
}
#define BIG 2048
#define MIDLIN 512
char readbuf[BIG];
-struct iovec iov[1] = {
- readbuf,
- sizeof readbuf,
-};
union {
struct {
struct cmsghdr cmhdr;
union {
struct {
struct cmsghdr cmhdr;
} cbuf;
#define control cbuf.data
struct msghdr msghdr = {
} cbuf;
#define control cbuf.data
struct msghdr msghdr = {
iov, sizeof(iov)/sizeof(iov[1]),
iov, sizeof(iov)/sizeof(iov[1]),
- control, sizeof(control),
- 0 /* flags */
{
int x, s, pid, on = 1, loop = 0, n;
extern int errno;
{
int x, s, pid, on = 1, loop = 0, n;
extern int errno;
int addrlen = sizeof(faddr);
char childname[50];
int addrlen = sizeof(faddr);
char childname[50];
- try (accept, (s, &faddr, &addrlen), "");
+ try (accept, (s, (struct sockaddr *)&faddr, &addrlen), "");
ns = x;
dumpit("connection from:", &faddr, sizeof faddr);
if (mynamep || intercept) {
addrlen = sizeof(faddr);
ns = x;
dumpit("connection from:", &faddr, sizeof faddr);
if (mynamep || intercept) {
addrlen = sizeof(faddr);
- try (getsockname, (ns, &faddr, &addrlen), "");
+ try (getsockname, (ns, (struct sockaddr *)&faddr,
+ &addrlen), "");
dumpit("connected as:", &faddr, addrlen);
}
loop++;
dumpit("connected as:", &faddr, addrlen);
}
loop++;
long n, count = 0, cn, flags;
records = 0;
for (;;) {
long n, count = 0, cn, flags;
records = 0;
for (;;) {
msghdr.msg_controllen = sizeof(control);
msghdr.msg_controllen = sizeof(control);
+ msghdr.msg_control = control;
iov->iov_len = sizeof(readbuf);
iov->iov_len = sizeof(readbuf);
+ iov->iov_base = readbuf;
n = recvmsg(ns, &msghdr, 0);
flags = msghdr.msg_flags;
count++;
n = recvmsg(ns, &msghdr, 0);
flags = msghdr.msg_flags;
count++;
} savebuf = {&savebuf, &savebuf};
void
} savebuf = {&savebuf, &savebuf};
void
int n;
{
register struct savebuf *s = (struct savebuf *)malloc(n + sizeof *s);
int n;
{
register struct savebuf *s = (struct savebuf *)malloc(n + sizeof *s);
return;
insque(s, savebuf.s_prev);
s->s_n = n;
return;
insque(s, savebuf.s_prev);
s->s_n = n;
+ s->s_flags = msghdr.msg_flags;
+ bcopy(readbuf, (char *)(s + 1), n);
int n;
register struct savebuf *s = savebuf.s_next, *t;
msghdr.msg_controllen = 0;
int n;
register struct savebuf *s = savebuf.s_next, *t;
msghdr.msg_controllen = 0;
+ msghdr.msg_control = 0;
while (s != &savebuf) {
iov->iov_len = s->s_n;
while (s != &savebuf) {
iov->iov_len = s->s_n;
+ iov->iov_base = (char *)(s + 1);
n = sendmsg(ns, &msghdr, s->s_flags);
dbprintf("echoed %d\n", n);
t = s; s = s->s_next; remque(t); free((char *)t);
n = sendmsg(ns, &msghdr, s->s_flags);
dbprintf("echoed %d\n", n);
t = s; s = s->s_next; remque(t); free((char *)t);