File: TCPSocket.m

package info (click to toggle)
ohcount 3.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 4,712 kB
  • ctags: 3,205
  • sloc: ansic: 6,524; ruby: 2,560; perl: 2,041; erlang: 350; lisp: 272; sh: 244; pascal: 196; vhdl: 150; haskell: 149; asm: 128; cs: 124; awk: 98; java: 92; php: 73; tcl: 58; xml: 57; fortran: 54; makefile: 32; python: 31; ada: 30; objc: 30; jsp: 28; sql: 18; cobol: 13; ml: 9; cpp: 3
file content (49 lines) | stat: -rw-r--r-- 1,463 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/** 
 * This code is free software; you can redistribute it and/or modify it under
 * the terms of the new BSD License.
 *
 * Copyright (c) 2009, Sebastian Staudt
 */

#import <arpa/inet.h>
#import <netinet/in.h>

#import "SteamCondenserException.h"
#import "TCPSocket.h"


@implementation TCPSocket

-(void) connectWithHost:(NSHost*) aHost andPort:(unsigned short) aPort {
    remoteHost = aHost;
    remotePort = aPort;
    
    struct sockaddr_in remoteSocket;
    remoteSocket.sin_family = AF_INET;
    remoteSocket.sin_port = htons(remotePort);
    NSString* address;
    NSEnumerator* addressEnumerator = [[remoteHost addresses] objectEnumerator];
    while(address = [addressEnumerator nextObject]) {
        if(inet_pton(AF_INET, [address cStringUsingEncoding:NSASCIIStringEncoding], &remoteSocket.sin_addr) == 1) {
            break;
        }
    }
    
    fdsocket = socket(AF_INET, SOCK_STREAM, 0);
    if(fdsocket < 0) {
        @throw [[SteamCondenserException alloc] initWithMessage:[NSString stringWithFormat:@"Error creating socket: %s", strerror(errno)]];
    }
    
    if(connect(fdsocket, (struct sockaddr*) &remoteSocket, sizeof(remoteSocket)) < 0) {
        @throw [[SteamCondenserException alloc] initWithMessage:[NSString stringWithFormat:@"Error connecting socket: %s", strerror(errno)]];
    }
    
    if(!isBlocking) {
        fcntl(fdsocket, F_SETFL, O_NONBLOCK);
    }
    else {
        fcntl(fdsocket, F_SETFL, 0);
    }
}

@end