Changeset View
Changeset View
Standalone View
Standalone View
head/sys/kern/sys_socket.c
Show First 20 Lines • Show All 201 Lines • ▼ Show 20 Lines | if (*(int *)data) { | ||||
SOCKBUF_UNLOCK(&so->so_snd); | SOCKBUF_UNLOCK(&so->so_snd); | ||||
} | } | ||||
SOCK_UNLOCK(so); | SOCK_UNLOCK(so); | ||||
} | } | ||||
break; | break; | ||||
case FIONREAD: | case FIONREAD: | ||||
/* Unlocked read. */ | /* Unlocked read. */ | ||||
if (SOLISTENING(so)) { | |||||
error = EINVAL; | |||||
} else { | |||||
*(int *)data = sbavail(&so->so_rcv); | *(int *)data = sbavail(&so->so_rcv); | ||||
} | |||||
break; | break; | ||||
case FIONWRITE: | case FIONWRITE: | ||||
/* Unlocked read. */ | /* Unlocked read. */ | ||||
if (SOLISTENING(so)) { | |||||
error = EINVAL; | |||||
} else { | |||||
*(int *)data = sbavail(&so->so_snd); | *(int *)data = sbavail(&so->so_snd); | ||||
} | |||||
break; | break; | ||||
case FIONSPACE: | case FIONSPACE: | ||||
/* Unlocked read. */ | /* Unlocked read. */ | ||||
if (SOLISTENING(so)) { | |||||
error = EINVAL; | |||||
} else { | |||||
if ((so->so_snd.sb_hiwat < sbused(&so->so_snd)) || | if ((so->so_snd.sb_hiwat < sbused(&so->so_snd)) || | ||||
(so->so_snd.sb_mbmax < so->so_snd.sb_mbcnt)) | (so->so_snd.sb_mbmax < so->so_snd.sb_mbcnt)) { | ||||
*(int *)data = 0; | *(int *)data = 0; | ||||
else | } else { | ||||
*(int *)data = sbspace(&so->so_snd); | *(int *)data = sbspace(&so->so_snd); | ||||
} | |||||
} | |||||
break; | break; | ||||
case FIOSETOWN: | case FIOSETOWN: | ||||
error = fsetown(*(int *)data, &so->so_sigio); | error = fsetown(*(int *)data, &so->so_sigio); | ||||
break; | break; | ||||
case FIOGETOWN: | case FIOGETOWN: | ||||
*(int *)data = fgetown(&so->so_sigio); | *(int *)data = fgetown(&so->so_sigio); | ||||
break; | break; | ||||
case SIOCSPGRP: | case SIOCSPGRP: | ||||
error = fsetown(-(*(int *)data), &so->so_sigio); | error = fsetown(-(*(int *)data), &so->so_sigio); | ||||
break; | break; | ||||
case SIOCGPGRP: | case SIOCGPGRP: | ||||
*(int *)data = -fgetown(&so->so_sigio); | *(int *)data = -fgetown(&so->so_sigio); | ||||
break; | break; | ||||
case SIOCATMARK: | case SIOCATMARK: | ||||
/* Unlocked read. */ | /* Unlocked read. */ | ||||
if (SOLISTENING(so)) { | |||||
error = EINVAL; | |||||
} else { | |||||
*(int *)data = (so->so_rcv.sb_state & SBS_RCVATMARK) != 0; | *(int *)data = (so->so_rcv.sb_state & SBS_RCVATMARK) != 0; | ||||
} | |||||
break; | break; | ||||
default: | default: | ||||
/* | /* | ||||
* Interface/routing/protocol specific ioctls: interface and | * Interface/routing/protocol specific ioctls: interface and | ||||
* routing ioctls should have a different entry since a | * routing ioctls should have a different entry since a | ||||
* socket is unnecessary. | * socket is unnecessary. | ||||
*/ | */ | ||||
if (IOCGROUP(cmd) == 'i') | if (IOCGROUP(cmd) == 'i') | ||||
▲ Show 20 Lines • Show All 571 Lines • Show Last 20 Lines |