attempted to fix some socket class issues
This commit is contained in:
		@ -45,7 +45,7 @@ extend Socket
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	method asyncConnect: connectBlock
 | 
						method asyncConnect: connectBlock
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		| s1 s2 sg sa |
 | 
							| s1 s2 sa |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		s1 := Semaphore new.
 | 
							s1 := Semaphore new.
 | 
				
			||||||
		s2 := Semaphore new.
 | 
							s2 := Semaphore new.
 | 
				
			||||||
@ -61,14 +61,15 @@ extend Socket
 | 
				
			|||||||
		s1 signalAction: sa.
 | 
							s1 signalAction: sa.
 | 
				
			||||||
		s2 signalAction: sa.
 | 
							s2 signalAction: sa.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## TODO: unsignal s1 s2, remove them from System when exception occurs.
 | 
							[
 | 
				
			||||||
			System signal: s1 onOutput: self.handle.
 | 
								System signal: s1 onOutput: self.handle.
 | 
				
			||||||
		System signal: s2 after: 10.
 | 
								System signal: s2 afterSecs: 10.
 | 
				
			||||||
 | 
					 | 
				
			||||||
			System addAsyncSemaphore: s1.
 | 
								System addAsyncSemaphore: s1.
 | 
				
			||||||
			System addAsyncSemaphore: s2.
 | 
								System addAsyncSemaphore: s2.
 | 
				
			||||||
 | 
					 | 
				
			||||||
			self connect(1, 2, 3).
 | 
								self connect(1, 2, 3).
 | 
				
			||||||
 | 
							] ifCurtailed: [
 | 
				
			||||||
 | 
								sa value: s2.
 | 
				
			||||||
 | 
							]
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	method asyncRead: readBlock
 | 
						method asyncRead: readBlock
 | 
				
			||||||
@ -81,7 +82,7 @@ extend Socket
 | 
				
			|||||||
		s2 signalAction: [:sem | readBlock value: false].
 | 
							s2 signalAction: [:sem | readBlock value: false].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		System signal: s1 onInput: self.handle.
 | 
							System signal: s1 onInput: self.handle.
 | 
				
			||||||
		System signal: s2 after: 10.
 | 
							System signal: s2 afterSecs: 10.
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(*
 | 
					(*
 | 
				
			||||||
@ -95,7 +96,7 @@ extend Socket
 | 
				
			|||||||
		s2 signalAction: [:sem | writeBlock value: false].
 | 
							s2 signalAction: [:sem | writeBlock value: false].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		System signal: s1 onOutput: self.handle.
 | 
							System signal: s1 onOutput: self.handle.
 | 
				
			||||||
		System signal: s2 after: 10.
 | 
							System signal: s2 afterSecs: 10.
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
*)
 | 
					*)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -109,12 +110,21 @@ class MyObject(Object)
 | 
				
			|||||||
		| s |
 | 
							| s |
 | 
				
			||||||
		[
 | 
							[
 | 
				
			||||||
			s := Socket domain: Socket.Domain.INET type: Socket.Type.STREAM.
 | 
								s := Socket domain: Socket.Domain.INET type: Socket.Type.STREAM.
 | 
				
			||||||
			s dump.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			s asyncConnect: [:result | 
 | 
								s asyncConnect: [:result | 
 | 
				
			||||||
				##s endConnect: result.
 | 
									##s endConnect: result.
 | 
				
			||||||
				##s beginRead: xxx.
 | 
									##s beginRead: xxx.
 | 
				
			||||||
 | 
									if (result)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
					'CONNECTED NOW.............' dump.
 | 
										'CONNECTED NOW.............' dump.
 | 
				
			||||||
 | 
										s asyncRead: [:data |
 | 
				
			||||||
 | 
											data dump.
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										'UNABLE TO CONNECT............' dump.
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			].
 | 
								].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			while (true)
 | 
								while (true)
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,7 @@ class System(Apex)
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		^self.asyncsg removeSemaphore: sem
 | 
							^self.asyncsg removeSemaphore: sem
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	method(#class) handleAsyncEvent
 | 
						method(#class) handleAsyncEvent
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		^self.asyncsg wait.
 | 
							^self.asyncsg wait.
 | 
				
			||||||
 | 
				
			|||||||
@ -134,7 +134,7 @@ struct sockaddr_in sin;
 | 
				
			|||||||
memset (&sin, 0, sizeof(sin));
 | 
					memset (&sin, 0, sizeof(sin));
 | 
				
			||||||
sin.sin_family = AF_INET;
 | 
					sin.sin_family = AF_INET;
 | 
				
			||||||
sin.sin_addr.s_addr = inet_addr ("1.234.53.142");
 | 
					sin.sin_addr.s_addr = inet_addr ("1.234.53.142");
 | 
				
			||||||
sin.sin_port = htons(80);
 | 
					sin.sin_port = htons(12345);
 | 
				
			||||||
	do
 | 
						do
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		n = connect(fd, (struct sockaddr*)&sin, sizeof(sin));
 | 
							n = connect(fd, (struct sockaddr*)&sin, sizeof(sin));
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user