ARGSUSED*/
| 3862 | |
| 3863 | /*ARGSUSED*/ |
| 3864 | static int |
| 3865 | filt_sowrite(struct knote *kn, long hint) |
| 3866 | { |
| 3867 | struct socket *so; |
| 3868 | |
| 3869 | so = kn->kn_fp->f_data; |
| 3870 | |
| 3871 | if (SOLISTENING(so)) |
| 3872 | return (0); |
| 3873 | |
| 3874 | SOCKBUF_LOCK_ASSERT(&so->so_snd); |
| 3875 | kn->kn_data = sbspace(&so->so_snd); |
| 3876 | |
| 3877 | hhook_run_socket(so, kn, HHOOK_FILT_SOWRITE); |
| 3878 | |
| 3879 | if (so->so_snd.sb_state & SBS_CANTSENDMORE) { |
| 3880 | kn->kn_flags |= EV_EOF; |
| 3881 | kn->kn_fflags = so->so_error; |
| 3882 | return (1); |
| 3883 | } else if (so->so_error) /* temporary udp error */ |
| 3884 | return (1); |
| 3885 | else if (((so->so_state & SS_ISCONNECTED) == 0) && |
| 3886 | (so->so_proto->pr_flags & PR_CONNREQUIRED)) |
| 3887 | return (0); |
| 3888 | else if (kn->kn_sfflags & NOTE_LOWAT) |
| 3889 | return (kn->kn_data >= kn->kn_sdata); |
| 3890 | else |
| 3891 | return (kn->kn_data >= so->so_snd.sb_lowat); |
| 3892 | } |
| 3893 | |
| 3894 | static int |
| 3895 | filt_soempty(struct knote *kn, long hint) |
nothing calls this directly
no test coverage detected