mirror of
https://github.com/open-simh/simh.git
synced 2026-04-26 04:07:23 +00:00
SOCKETS: Cleanup, simplify and extend the sim_sock API set.
Cleanup/Simplification by: 1) removing irrelevant master flag variable from sim_close_sock and thus sim_err_sock 2) change previous boolean feature arguments (datagram, nodelay, reuseaddr) to flag bits in a single option argument. This allows for features to be added by new flag bits which don't change the calling signatures. 3) changed all status returns to be int (vs t_stat) with success being 0 and error being -1 4) removed unneeded simh specific type references to allow sim_sock to be used by n Extended API by providing flags to influence socket setup/behavior: SIM_SOCK_OPT_REUSEADDR Retains prior behavior when sim_switches had -U set SIM_SOCK_OPT_DATAGRAM UDP socket setup provided for when prior datagram argument was specified SIM_SOCK_OPT_NODELAY TCP Nagle disable provided for when prior nodelay argument was specified SIM_SOCK_OPT_BLOCKING Blocking socket mode (detault is non blocking)
This commit is contained in:
@@ -154,8 +154,7 @@ static t_stat net_attach(UNIT *uptr, char *cptr) {
|
||||
char host[CBUFSIZE], port[CBUFSIZE];
|
||||
t_stat r;
|
||||
|
||||
r = sim_parse_addr (cptr, host, sizeof(host), "localhost", port, sizeof(port), "3000", NULL);
|
||||
if (r != SCPE_OK)
|
||||
if (sim_parse_addr (cptr, host, sizeof(host), "localhost", port, sizeof(port), "3000", NULL))
|
||||
return SCPE_ARG;
|
||||
net_reset(&net_dev);
|
||||
for (i = 0; i <= MAX_CONNECTIONS; i++)
|
||||
@@ -185,10 +184,10 @@ static t_stat net_detach(UNIT *uptr) {
|
||||
if (!(net_unit.flags & UNIT_ATT))
|
||||
return SCPE_OK; /* if not attached simply return */
|
||||
if (net_unit.flags & UNIT_SERVER)
|
||||
sim_close_sock(serviceDescriptor[1].masterSocket, TRUE);
|
||||
sim_close_sock(serviceDescriptor[1].masterSocket);
|
||||
for (i = 0; i <= MAX_CONNECTIONS; i++)
|
||||
if (serviceDescriptor[i].ioSocket)
|
||||
sim_close_sock(serviceDescriptor[i].ioSocket, FALSE);
|
||||
sim_close_sock(serviceDescriptor[i].ioSocket);
|
||||
free(net_unit.filename); /* free port string */
|
||||
net_unit.filename = NULL;
|
||||
net_unit.flags &= ~UNIT_ATT; /* not attached */
|
||||
@@ -226,7 +225,7 @@ static t_stat net_svc(UNIT *uptr) {
|
||||
BUFFER_LENGTH - serviceDescriptor[i].inputSize);
|
||||
if (r == -1) {
|
||||
sim_debug(DROP_MSG, &net_dev, "NET: " ADDRESS_FORMAT " Drop connection %i with socket %i.\n", PCX, i, serviceDescriptor[i].ioSocket);
|
||||
sim_close_sock(serviceDescriptor[i].ioSocket, FALSE);
|
||||
sim_close_sock(serviceDescriptor[i].ioSocket);
|
||||
serviceDescriptor[i].ioSocket = 0;
|
||||
serviceDescriptor_reset(i);
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user