8000 De-duplicate socket creation & binding · g-coder/midikit@c8a6d88 · GitHub
[go: up one dir, main page]

Skip to content

Commit c8a6d88

Browse files
committed
De-duplicate socket creation & binding
1 parent 7b67ffb commit c8a6d88

File tree

1 file changed

+28
-38
lines changed

1 file changed

+28
-38
lines changed

driver/applemidi/applemidi.c

Lines changed: 28 additions & 38 deletions
7D23
Original file line numberDiff line numberDiff line change
@@ -166,54 +166,44 @@ static int _applemidi_update_runloop_source( struct MIDIDriverAppleMIDI * driver
166166
}
167167

168168

169-
static int _applemidi_connect( struct MIDIDriverAppleMIDI * driver ) {
170-
int result = 0;
169+
static int _applemidi_bind( int fd, int port ) {
171170
#if (defined(AF_INET6) && defined(ENABLE_IPV6))
172171
struct sockaddr_in6 addr;
173172
memset(&addr, 0, sizeof(addr));
173+
addr.sin6_family = AF_INET6;
174+
addr.sin6_addr = in6addr_any;
175+
addr.sin6_port = htons( port );
176+
#else
177+
struct sockaddr_in addr;
178+
memset(&addr, 0, sizeof(addr));
179+
addr.sin_family = AF_INET;
180+
addr.sin_addr.s_addr = INADDR_ANY;
181+
addr.sin_port = htons( port );
182+
#endif
183+
return bind( fd, (struct sockaddr *) &addr, sizeof(addr) );
184+
}
174185

175-
if( driver->control_socket <= 0 ) {
176-
addr.sin6_family = AF_INET6;
177-
addr.sin6_addr = in6addr_any;
178-
addr.sin6_port = htons( driver->port );
179-
180-
driver->control_socket = socket( PF_INET6, SOCK_DGRAM, 0 );
181-
if (driver->control_socket != -1)
182-
result = bind( driver->control_socket, (struct sockaddr *) &addr, sizeof(addr) );
183-
}
184-
185-
if( driver->rtp_socket <= 0 ) {
186-
addr.sin6_family = AF_INET6;
187-
addr.sin6_addr = in6addr_any;
188-
addr.sin6_port = htons( driver->port + 1 );
189186

190-
driver->rtp_socket = socket( PF_INET6, SOCK_DGRAM, 0 );
191-
if (driver->rtp_socket != -1)
192-
result = bind( driver->rtp_socket, (struct sockaddr *) &addr, sizeof(addr) );
193-
}
187+
static int _applemidi_connect( struct MIDIDriverAppleMIDI * driver ) {
188+
int result = 0;
189+
#if (defined(AF_INET6) && defined(ENABLE_IPV6))
190+
int pf = PF_INET6;
194191
#else
195-
struct sockaddr_in addr;
196-
memset(&addr, 0, sizeof(addr));
197-
if( driver->control_socket <= 0 ) {
198-
addr.sin_family = AF_INET;
199-
addr.sin_addr.s_addr = INADDR_ANY;
200-
addr.sin_port = htons( driver->port );
192+
int pf = PF_INET;
193+
#endif
201194

202-
driver->control_socket = socket( PF_INET, SOCK_DGRAM, 0 );
203-
if (driver->control_socket != -1)
204-
result = bind( driver->control_socket, (struct sockaddr *) &addr, sizeof(addr) );
195+
if( driver->control_socket <= 0 ) {
196+
driver->control_socket = socket( pf, SOCK_DGRAM, 0 );
197+
if( driver->control_socket != -1 )
198+
result = _applemidi_bind( driver->control_socket, driver->port );
205199
}
206200

207-
if( driver->rtp_socket <= 0 ) {
208-
addr.sin_family = AF_INET;
209-
addr.sin_addr.s_addr = INADDR_ANY;
210-
addr.sin_port = htons( driver->port + 1 );
211-
212-
driver->rtp_socket = socket( PF_INET, SOCK_DGRAM, 0 );
213-
if (driver->control_socket != -1)
214-
result = bind( driver->rtp_socket, (struct sockaddr *) &addr, sizeof(addr) );
201+
if( result == 0 && driver->rtp_socket <= 0 ) {
202+
driver->rtp_socket = socket( pf, SOCK_DGRAM, 0 );
203+
if( driver->rtp_socket != -1 )
204+
result = _applemidi_bind( driver->rtp_socket, driver->port + 1 );
215205
}
216-
#endif
206+
217207
return result;
218208
}
219209

0 commit comments

Comments
 (0)
0