ノンブロッキングソケットのコーディング

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Fuzzy

ノンブロッキングソケットのコーディング

#1 投稿記事 by Fuzzy »

ノンブロッキングでパケット受信を行うようにしたいのですが、どのようにコーディングすればいいのでしょうか。
Sinryow
記事: 141
登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:

Re: ノンブロッキングソケットのコーディング

#2 投稿記事 by Sinryow »

ソケット通信は始めたてで「ノンブロッキングソケット」という言葉も初めて聞いたのですが
検索をかけた限りでは,ここが分かりやすいでしょうかね…
http://www.geekpage.jp/programming/wins ... ocking.php
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
Fuzzy

Re: ノンブロッキングソケットのコーディング

#3 投稿記事 by Fuzzy »

初心者で申し訳ないないのですが、下記の様にコーディングしましたが、
コンパイルが通りません。
具体的なコーディングを教えてもらえないでしょうか。

val=1
sts = ioctlsocket(id,FIONBIO, &val)
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

Re: ノンブロッキングソケットのコーディング

#4 投稿記事 by hira »

ActiveBasicでは、変数のポインタはVarPtr関数で表します。さらに、FIONBIOという定数も定義されていないと思われますので、

コード: 全て選択

Const FIONBIO=&H5421
sts = ioctlsocket(id, FIONBIO, VarPtr(val))
としてください(実際にはConstはグローバルで定義してください)。
ゲスト

#5 投稿記事 by ゲスト »

コンパイルは通るようになりましたが、stsに-1が返ってきて失敗しているようです。

コード: 全て選択

Declare Function ioctlsocket Lib "ws2_32.dll" (s As DWord, cmd As Long,  argp As DWordPtr) As Long
Const FIONBIO=&H5421
Dim val As DWord
Dim sts As Long

val=1
sts = ioctlsocket(id, FIONBIO, VarPtr(val))
では、駄目でしょうか。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

#6 投稿記事 by hira »

ioctlsocketの第1引数は、作成したソケットのハンドルです。
実際のコードがどうなっているかはわかりませんが、ioctlsocketの行をいきなり呼び出しているとしたらエラーになりますので、Sinryowさん提示のURLでコードの流れを実際のコードと比較していただくといいでしょう。
※実際のコード全体があればこちらでも実験できるかもしれませんが
返信する