- sin = (struct sockaddr_in *)addr;
- if (sin->sin_family != AF_INET)
- return (EAFNOSUPPORT);
- udp_output(inp, sin->sin_addr, sin->sin_port, m);
- } else
- udp_output(inp,
- inp->inp_fhost->h_addr, inp->inp_fport, m);
+ error = in_pcbconnect(inp, (struct sockaddr_in *)addr);
+ if (error)
+ return (error);
+ } else {
+ if (inp->inp_faddr.s_addr == 0)
+ return (ENOTCONN);
+ }
+ udp_output(inp, m);
+ if (addr)
+ in_pcbdisconnect(inp);